青训营笔记
这是我参与「第四届青训营 」笔记创作活动的第20天
封装
视频编码以后音频未被包含在编码文件内,所以,视频编码后,加上音频编码,要一起进行封装。就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中。主要有MPG、MP4、RMVB、WMV、MOV等。
颜色空间
YUV就是一种种颜色数字化表示方式,区别于RGB采用256阶的三色混合表示不同的颜色,YUV加入了亮度这个概念,主要是因为RGB信号不利于压缩。眼睛对于亮和暗的分辨要比对颜色的分辨更精细一些(好像是论文科学验证还是实验得出的结论),人眼对颜色的敏感程度要低于对亮度的敏感程度。把更多带宽留给黑白信号(亮度),将稍少的带宽留相给彩色信号(色度),就能够在相同的颜色显示资源里面,极大的提高观看体验。
帧内压缩
帧内压缩也称为空间压缩。压缩一帧时,仅考虑本帧而不考虑相邻帧,也就是对视频里的每一帧图像采用单个图片压缩的形式,然后汇总。帧内压缩一般采用有损压缩算法,达不到很高的压缩比。
帧间压缩
帧间压缩是基于许多视频或动画的连续前后两帧具有很大的冗余的特点来实现的。通过比较时间轴上不同帧之间的数据实施压缩,也就是对每一帧,都有前向帧和后向帧,通过比对其改变的图像内容,压缩冗余内容。进一步提高压缩比.一般是无损压缩。
几种帧的区别:
- I帧:帧内编码帧,只进行帧内预测,无参考帧,自身能独立完成编码解码,压缩率小。
- P帧:前向编码帧,可以进行帧间预测和帧内预测,参考前面已编码的I帧,压缩率比I帧高。必须要参考帧能够正确编解码。
- B帧:双向编码帧,可以进行帧间预测和帧内预测,参考前面或者后面已预测编码的I帧和P帧,压缩率最好,需要缓存帧,延时高。也就是在编码的时候,同时对前后两个帧都进行比对、优化,会消耗大量资源,因为视频帧数非常多,不适合直播,视频通话这种及时性强的场景。
不同类型的帧对应不同使用场景
- 视频:节省带宽,高压缩率,会使用B帧
- 直播:低延迟,不使用 B 帧
- 视频编辑:提高响应,个别会使用全I帧
综上:I帧速度快,但是压缩率较低,适合低程度视频处理;B帧速度最慢,但是压缩率很高,适合本地缓存视频这种对及时性和延迟要求不高的场景;P帧介于两者中间,折中(经典折中)。
常见推拉流协议
RTMP、HTTP-FLV:HTTP+FLV、HLS