专栏名称: 3033
iOS开发
目录
相关文章推荐
社会学理论大缸  ·  悼念布洛维:一位马克思主义的公共社会学家 ·  昨天  
哲学王  ·  内卷,是全社会的无声悲哀 ·  2 天前  
51好读  ›  专栏  ›  3033

FFMPEG视音频编解码学习笔记

3033  · 掘金  ·  · 2017-12-14 00:35

正文

###开篇 一直对音视频这块比较感兴趣,但是一直不知道从何下手,终于找到了比较好的资料,希望通过接下来的时间好好研究一下FFMPEG相关的知识,这里感谢一下 雷霄骅大神 ,大神虽去但是留下来多少经典的文章,虽然都是通信出身,相比之下太多惭愧,唯有努力学习了。希望通过简书能够记录学习过程中的心得体会,以及觉得重要的知识点,以作备忘。 ####音视频编码技术基础 我们常见的avi,rmvb,mp4,flv,mkv等格式的视频,他们的后缀代表的是他们的封装格式的不同,就是把视频数据和音频数据按照既定的规范进行打包个和规范。但是这个后缀只是一种简单的方式我们并不能发现他其中的编码标准,通过mac的显示文件简介我们可以看到,他采用了AAC的音频编码和H.264的压缩编码标准。

“loginmovie_mp4”简介.png

  • 视频播放器原理

视频播放的步骤
如上图所示,视频播放主要主要几个步骤主要为:解协议(网络视频) - >解封装->视频解码 ->视音频同步 个人理解可以简单的概括为一下内容:协议有RTMP,HTTP等,解析仪后得到FLV(RTMP协议解析的)等形式的数据。之后我们再对FLV等格式的数据进行解封装,得到的是H.264编码的视频码流和AAC编码的音频码流。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。

  • H.264和AAC H.264将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量,目前H.264是主流的编码标准,目前主流的直播软件大部分使用的都是这种编码方式。 AAC音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。
  • 直播和点播的对比 目前主流的直播软件采用的技术一般都是,RTMP协议+FLV格式+H.264视频编码格式+AAC音频编码格式 点播平台采用的技术:HTTP协议+FLV格式或MP4格式+H.264视频编码格式+AAC音频编码格式

####RGB、YUV像素数据处理 YUV主要用于优化彩色视频信号的传输,使其向后相容老式黑白电视。与RGB视频信号传输相比,它最大的优点在于只需占用极少的频宽(RGB要求三个独立的视频信号同时传输)。其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色, YUV百度百科介绍 。 ####H.264视频码流解析

视频.png
原文: 视音频数据处理入门:H.264视频码流解析 ,包含代码。 H.264原始码流(又称为“裸流”)是由一个一个的NALU组成的。1个NALU存储1帧画面的压缩编码后的数据。压缩方法能够将图像数据压缩100倍以上。 他们的结构如下图所示。

结构图
其中每个NALU之间通过startcode(起始码)进行分隔,起始码分成两种:0x000001(3Byte)或者0x00000001(4Byte)。如果NALU对应的Slice为一帧的开始就用0x00000001,否则就用0x000001。 H.264码流解析的步骤就是首先从码流中搜索0x000001和0x00000001,分离出NALU;然后再分析NALU的各个字段。 那么NALU指的是什么呢?由文中的代码可以看到NALU分为多个类型。H264在网络传输的是NALU,NALU的结构是:NAL头+RBSP,实际传输中的数据流如图所示:

NALU的结构图
H264--2--语法及结构 对NAL头和RBSP讲解还是比较多的,推荐。 源码中我们提供H.264源码的文件,通过C语言代码的程序能够打印出视频码流解析的数据。如果我们使用ESEyE工具,显示H.264的源数据文件,显示的内容如下:

ESEyE工具显示的效果图
上图中纵坐标代表数据量的大小





请到「今天看啥」查看全文