概要
从事音视频开发中,视频涉及的东西比较多,尤其是编码这块,本篇介绍下视频的相关概念。
正文
视频与图像
我们看到的视频其实是图像在高速变化,由于视觉的暂留效应,所以看起来就是连续的了。
彩色空间
我们知道有RGB 3原色,用这三种颜色可以组合成各种其他颜色。还有一种表示方法,叫YUV,也就是把颜色分成亮度和色度,这样的好处是人对于亮度信号是比较敏感的,只要有亮度信号,色度信号缺少点也看不出差异,这样就可以大大优化编码的信号。 而YUV和RGB又可以相互转换,在传输的时候使用YUV,在显示的时候使用RGB。 而对于YUV,又有几种不同的比例。
- 4:4:4 在每一个像素位置,都有Y,Cb,Cr分量,也就是每4个亮度像素,都有4个Cb和Cr色度像素。
- 4:2:2 在竖直方向,亮度和色度分量一致,而水平方向,色度分量是亮度分量的一半,也就是每4个亮度像素具有2个Cb和2个Cr。
- 4:2:0 在水平和垂直方向,色度分量都是亮度分量的一半。
编码
图像信息在传输的时候,如果没有编码,那么视频数据占用的带宽会非常大。举一个例子,采用4:2:0格式,亮度信号是13.5MHZ,色度是6.75MHZ,这个频率算是很低的了,这样码率就是:
image.png
如果是1080p场景,那码率就更大了。因此就需要编码。
在编码的时候,有帧内编码和帧间编码区分。帧内编码就是对一帧图像进行编码,去除冗余信息。而帧间编码就是利用运动补偿去除冗余信息,在视频场景中,连续图像帧的重复度还是很大的,这样可以把图像进行分块,然后预估块的运行信息,这样只需要把位移信息编码传输就可以了。
IPB帧
在视频编码中,会把图像分成不同类型的帧,主要有I,P,B帧。 I帧:这是帧内编码帧,I帧不需要参考其他帧,解码后就是一幅完整的图像。 P帧:前向预测编码帧,需要参考前面已经编码的帧来去除冗余信息完整自己的编码,也就是可以简单理解成,在解码的时候,自己是无法独立解码成一张图片的,需要参考前面已经解码的帧才可以。 B帧:双向预测内插编码帧,需要参考前面和后面的帧来完成自己的编码。也就是在解码的时候,不仅需要参考前面已经解码的帧,还需要参考后面解码的帧才可以解码成一张完整的图像。
IDR
IDR(Instantaneous Decoding Refresh)也是一种I帧,不过收到IDR帧,就表示之后的帧不会再参考IDR以前的帧了。而普通的I帧之后则有可能参考I帧之前的图像帧。
GOP
GOP(Group of Pictures)图像组,表示图像帧只会参考本组内的图像帧,而不会参考其他组的图像帧。
PTS和DTS
DTS(decodeing time stamp),用于视频的编码。PTS(presentation time stamp),用于视频解码阶段的输出。按照常理来看,这两个时间戳应该是一致的,可是由于有B帧,这样编码和显示就会出现不一致性的场景。