雷神博客:雷霄骅(leixiaohua1020)的专栏_雷霄骅_CSDN博客-FFMPEG,FFmpeg,视频质量评价领域博主
一、视频播放器原理
大多数播放器的处理流程:
封装格式:将视频和音频打包起来的格式,打包后得到相应后缀的视频文件。
解封装格式:把音频流和视频流分开,得到码流(视频码流、音频码流),码流不能直接显示/播放。
视频解码:得到YUV数据,YUV数据保存了每个像素点的取值。
最后将YUV(视频)送到显示器、PCM(音频)送到音频设备播放。
二、两种典型的视频格式
把数据封装到固定大小的包,然后将包发送到有线电视网络中。没有头,所以如果前面的数据损坏不影响后面数据的播放。
数据封装到不固定大小的 tag(帧)中,数据有损坏则整个视频无法播放。
三、H.264编码格式
目前绝大多数(超过90%)视频采用的是 H.264 格式编码的。
一帧画面作为一个 NALU 储存起来。
3.1、使用 Elecard StreamEye Tools 工具查看 .h264 文件
如上图,编码分成几种帧:
- 红色的:I帧
- 蓝色的:P帧
- 绿色的:B帧
I帧:直接压缩图片,不和其他的帧关联,如上图第一帧。
P帧:依赖于前面的帧。
上图红线为运动矢量。P帧只存储与红色帧不一样的地方。
即I帧(红色)把一帧图像完整存储下来,下一帧蓝色的P帧则对比I帧只存储与I帧不一样的地方。所以静止的视频只需要很小的容量就可以保存很长的内容。
B帧:的原理和P帧一样,但参考了前面和后面的帧,即只存储和前面帧、后面帧都不同的内容,所以能达到更高的压缩率。见下图B帧有两种运动矢量(红线和绿线)。
四、音频编码
音频本身占用的数据不是特别大,就是不压缩的音乐储存容量也不大,所以音频压缩不如视频压缩重要。
五、视频像素数据
六、音频采用数据
使用 Adobe Audition 打开一段音频采用数据(.pcm文件):
看起来是连续的,将它缩放到最大:
可见是由点组成的离散数据,点的个数和采用率相等(采用率为 44100HZ 则每秒44100个点。)