一个专注音视频领域问答的小圈子

最近在研究学习 FFmpeg,从网上参考了好多资料,其中最了不起的就当属——雷霄骅大神了,若没有他的博文,别说入门了,可能连门在哪里都不知道,在此还是要表达一下对雷神的敬佩和敬仰。

本文主要讲的是视频文件的解码,从视频文件的封装格式解码到原始数据格式,通过讲解涉及到的各种概念,从而理清整个思路和流程。

为何封装格式?

在我们平时接触到的视频文件,大都是以.mp4.flv.avi.rmvb后缀结尾的。

然而,事情并不是这么简单,这些后缀名其实还代表着一种封装格式,一种把音频数据和视频数据打包成一个文件的格式规范。

配图一张,以 .xxx 后缀的视频文件大概包含如下内容:

http://7xqe3m.com1.z0.glb.clouddn.com/blog_video_file_container.png

由此可见,我们平时接触的.avi包含的东西还是挺多的。

封装格式的编解码

在上面有讲到,视频文件其实包含着音频数据和视频数据,那么这些音频数据和视频数据又是如何形成封装格式的呢?

这里就涉及到编解码的知识了,原始的音频或者视频数据是很大的。比如,如果不进行压缩或者编码处理,用手机随便录一段视频可能就有几百M了,而有时候看部一个小时的电影也就才几百M,这就是对原始数据处理方式不同的结果。

而我们的音频或者视频数据,也是要通过编码处理进行压缩,对他们进行编码处理后,体积都会变小,这样才能合并成具体的某种封装格式。

同时,当我们要播放视频或者音频时,还需要对编码压缩后的数据进行解码,从压缩的数据解码到原始数据,并将原始数据送到对应的设备,比如显卡或者声卡进行播放。这就是一个解封装的过程。

不同的封装格式支持的音视频编解码标准不一样,越是优越的封装格式,支持的编码标准越多,比如:MKV封装格式,而RMVB封装格式就算落后的,支持的音视频标准有限。

这里,还是借雷神的图一张,很形象的解释了音频文件解码的整个过程。

  • 解协议->封装格式数据
  • 解封装->音频数据和视频数据
    • 音频解码->设备输出
    • 视频解码->设备输出

http://img.blog.csdn.net/20160117235313221

音视频的原始数据格式和编解码标准

在上面有讲到,封装格式其实就是音频或者视频的原始数据进行编码压缩得到的。而且,音频和视频对应的原始数据格式和编解码标准都不一样。

音频的原始数据格式和编解码标准

音频的原始数据格式主要有如下几种:

  • PCM 格式

音频的编解码标准主要有如下几种:

  • MP3
  • AAC
  • AC-3

视频的原始数据格式和编解码标准

视频的原始数据格式主要有如下几种:

  • YUV 格式
  • RGB 格式

视频的编解码标准主要有如下几种:

  • H.264
  • H.265
  • MPEG2

这些原始数据格式和编解码标准初次看是有点陌生,但接触多了,也就逐渐熟悉了,先以掌握主流的编解码标准为主,这里也只是列出了其中一部分而已。

MEPG->PCM 的解析

有了以上的理论基础,就可以开始我们的解析工作了。

使用 FFmpeg 3.x 的版本(与 2.x 版本相比接口有了较大变化)将 MEPG 的视频文件解码到 PCM 的原生数据格式。

这里的案例参考的是 FFmpeg 官网的例子,地址在此:http://ffmpeg.org/doxygen/trunk/examples.html

参考

  1. http://blog.csdn.net/leixiaohua1020/article/details/15811977
  2. http://ffmpeg.org/doxygen/trunk/examples.html

知识星球

一个专注音视频领域问答的小圈子

公众号音视频开发进阶对应的知识星球,一个编程开发领域的专业圈子,贩卖知识和技巧!

※ 入群须知:了解该星球能提供的价值和帮助,在提问时务必阐述好背景,附带相关的信息。

iOS 用户可以加我微信 ezglumes 邀请你进星球,有疑问也可以加我微信咨询。

※ 星球内容:

基础教程:

在知识星球连载的干货教程,可以在专栏中找到,随着时间的推移,教程也会越来越多:

- 音视频基础概念
- WebRTC 入门教程及源码实践
- 播放器教程及源码实践
- OpenGL 和特效开发教程
- Vulkan 入门教程

部分内容可以在博客 https://glumes.com 中检索到,后面会在星球里持续更新.

干货分享:

涵盖了移动开发和音视频工程领域的绝大部分,从项目实战角度出发,提升能力,包括但不限于以下领域:

- Android/iOS 移动开发
- Camera 开发
- 短视频编辑 SDK 项目实践
- 在线直播和推流
- WebRTC 开发
- 播放器基础和提高
- OpenGL 图像渲染及特效开发
- C++ 基础和提高
- FFmpeg 使用和分析
- 干货资源和书籍分享

不止于技术方面的,各种 IT 新闻、茶余饭后、生活趣事也欢迎大家分享!!!

技术答疑解惑:

针对上述基础教程和干货分享的答疑,另外还有音视频和 IT 开发中的各种交流讨论。

- 基础知识点答疑
- 工业项目实践答疑
- 问题排查思路分析

一个 BUG 排查很久,不如来星球里提个问题,效率提升百倍。

求职和面试辅导:

一站式职场服务,每份工作都值得用心对待!!!

- 面试题和面试经验分享
- 简历修改和模拟面试
- 大厂内推和信息同步
- 职场经验分享
- 职业规划和发展分析

※ 星主和合伙人介绍

星主是公众号音视频开发进阶的作者,也是网站 https://glumes.com 的作者,曾参与过抖音、剪映等头部音视频 APP 底层 SDK 的开发。

合伙人也是在头条、快手从事音视频架构师的职位,具有多年的音视频开发经验,能力圈覆盖了音视频的绝大多数领域,资深音视频从业人员为你保驾护航。

微信公众号

扫描下面的二维码关注我的微信公众号《音视频开发进阶》,推送更多精彩内容!

添加我的微信 ezglumes 拉你入音视频与图形图像技术群一起交流学习~

wechat-account-qrcode

原创文章,转载请注明来源:    音视频编解码的那些基础理论