图像
RGB
三原色光,等量的三原色光相加会变为白光,即白光中含 有等量的红光(R)、绿光(G)、蓝光(B)。
RGB表示方式
浮点表示
:取值范围为0.0~1.0,比如,在OpenGL ES中对每一个 子像素点的表示使用的就是这种表达方式。
整数表示
取值范围为0-255或者00~FF
iOS:RGBA_8888数据格式,32个比特表示一个像素。
比如计算一张 1280×720的RGBA_8888图像的大小,可采用如下方式:
1280 * 720 * 4 = 3.516MB
这也是位图(bitmap)在内存中所占用的大小,所以每一张图像的裸数据都是很大的。对于图像的裸数据来讲,直接在网络上进行传输也 是不太可能的,所以就有了图像的压缩格式
YUV表示方式
对于视频帧的裸数据表示,其实更多的是YUV数据格式的表示, YUV主要应用于优化彩色视频信号的传输,使其向后兼容老式黑白电 视。与RGB视频信号传输相比,它最大的优点在于只需要占用极少的频 宽(RGB要求三个独立的视频信号同时传输)。其中“Y”表示明亮度 (Luminance或Luma),也称灰阶值;而“U”和“V”表示的则是色度 (Chrominance或Chroma),它们的作用是描述影像的色彩及饱和度, 用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将 RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面—— 色调与饱和度,分别用Cr和Cb来表示。其中,Cr反映了RGB输入信号 红色部分与RGB信号亮度值之间的差异,而Cb反映的则是RGB输入信 号蓝色部分与RGB信号亮度值之间的差异。
YUV420
YUV最常用的采样格式是4:2:0,4:2:0并不意味着只有Y、Cb 而没有Cr分量。它指的是对每行扫描线来说,只有一种色度分量是以 2:1的抽样率来存储的。相邻的扫描行存储着不同的色度分量,也就是 说,如果某一行是4:2:0,那么其下一行就是4:0:2,再下一行是 4:2:0,以此类推。对于每个色度分量来说,水平方向和竖直方向的 抽样率都是2:1,所以可以说色度的抽样率是4:1。对非压缩的8比特 量化的视频来说,8×4的一张图片需要占用48字节的内存
相较于RGB,我们可以计算一帧为1280×720的视频帧,用
YUV420P的格式来表示,其数据量的大小如下:
1280 * 720 * 1 + 1280 * 720 * 0.5 = 1.318MB
YUV和RGB的转化
截屏2021-04-08 下午12.37.50.png1.6 视频的编码方式
ISO 定制Mpeg1(用于VCD)、 Mpeg2(用于DVD)、Mpeg4 AVC(现在流媒体使用最多的就是它 了)。
ITU-T制定的H.261、 H.262、H.263、H.264
IPB帧
I帧
自身可以通过视频解压算法解压成一张单独的完整视频画面,
所以I帧去掉的是视频帧在空间维度上的冗余信息。
P帧
需要参考其前面的一个I帧或者P帧来解码成一张完整的视频画
面。
B帧
则需要参考其前一个I帧或者P帧及其后面的一个P帧来生成一 张完整的视频画面,所以P帧与B帧去掉的是视频帧在时间维度上的冗 余信息。
IDR帧与I帧的理解
在H264的概念中有一个帧称为IDR帧,那么IDR帧与I帧的区别是什 么呢?首先来看一下IDR的英文全称instantaneous decoding refresh picture,因为H264采用了多帧预测,所以I帧之后的P帧有可能会参考I 帧之前的帧,这就使得在随机访问的时候不能以找到I帧作为参考条 件,因为即使找到I帧,I帧之后的帧还是有可能解析不出来,而IDR帧 就是一种特殊的I帧,即这一帧之后的所有参考帧只会参考到这个IDR 帧,而不会再参考前面的帧。在解码器中,一旦收到一个IDR帧,就会 立即清理参考帧缓冲区,并将IDR帧作为被参考的帧。
PTS与DTS
两种不同的时间戳。
DTS主要用于视频的解码,Decoding Time Stamp,解码顺序
PTS 主要用于视频显示 Presentation Time Stamp
GOP的概念
两个I帧之间形成的一组图片,就是GOP(Group Of Picture)的概 念
I的压缩率是7(与JPG差不多),P是20,B可以达到50
结合IPB帧和图1-11,相信大家能够更好地理解PTS与DTS的概念。
截屏2021-01-20 下午4.08.14.png
网友评论