学习资料
雷霄骅 大神的 《基于 FFmpeg + SDL 的视频播放器的制作》课程的视频
最近接触了直播后,就一直不懂它的原理。所以,我想去了解它,先从音视频开始。我现在主要的学习的资料和方向是根据 雷霄骅 大神的博客来的。很遗憾的是 ,雷大神已经离开了我们,愿天堂没有疲惫。但是,雷大神的知识和博客将永远帮助着我们这些新手,衷心感谢 雷霄骅 大神。
什么是 FFmpeg 呢?
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec。 FFmpeg是在Linux下开发出来的,但它可以在包括Windows在内的大多数操作系统中编译。这个项目是由Fabrice Bellard发起的,现在由Michael Niedermayer主持。可以轻易地实现多种视频格式之间的相互转换,例如可以将摄录下的视频avi等转成现在视频网站所采用的flv格式。
音视频封装格式
音视频就是由图像和声音组成。平常,我们看到大多音视频封装格式就有 MP4、RMVB、TS、FLV、AVI等。下面举例。
- MPEG2-TS 格式:不包含文件头,数据大小固定(188Byte)的TS Packet构成。 如果前面坏了,后面还可以播。
- FLV格式:包含文件头,数据大小不固定的Tag构成。前面文件头丢了,视频就坏了。
视频编码:
视频编码是将视频像素数据(RGB,YUV等)压缩为视频码流,从而降低视频的数据量。 常见格式就有H.264,MPEG2,VC-1 等,分析工具:Elecard Stream Eye
H.264 格式
- 1.数据由大小不固定的NALU构成
- 2.最常见的情况下,1个NALU存储了1帧画面的压缩编码后的数据。
H.264 压缩方法
- 比较复杂。包含了帧内预测、帧间预测、熵编码、环路滤波等环节构成。
- 可以将图像数据压缩100倍以上。
音频编码:
音频编码是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。常见格式有AAC,MP3,AC-3。
AAC 格式
- 数据有大小不固定的ADTS构成
AAC 压缩方法
- 比较复杂 略。
- 可以将音频数据压缩10倍以上。
视频像素数据
视频像素数据作用
- 保存了屏幕熵每个像素点的像素值。
格式
- 常见的像素数据格式有RGB24,RGB32,YUV420P,YUV422P,YUV444P等。压缩编码中一般使用的是YUV格式的像素数据,最为常见的格式为YUV420P。
特点
- 视频像素数据体积很大,一般情况下1小时高清视频的RGB24格式的数据体积为:
//这里假定帧率为25HZ,取样精度8bit。
3600*25*1920*1080*3 = 559.9GByte
YUV格式像素数据查看工具
- YUV Player
YUV 格式
Y的信息是 U、V信息的4倍。
音频采样数据
音频采样数据作用
- 保存了音频中每个采样点的值
特点
- 音频采样数据体积很大,一般情况下一首4分钟的PCM格式的歌曲体积为:
// 这里假定采样率为44100Hz,采样精度为16bit.
4*60*44100*2*2=42.3MByte
音频采样数据查看工具
- Adobe Audition