音视频入门基础——笔记( 三 )


[ Y U ] [ Y V ]
采样方式YUV4:2:0
相邻的4个像素里有4个Y、2个U、0个V,或4个Y、2个V,0个U 。每4个Y共用1组UV分量 。平均算来,一个像素占用的数据宽度为12b,其中Y占8b,U占2b,V占2b 。后面存储模式命名中的数字12指的就是12b 。
[ Y U ] [ Y ] [ Y U ] [ Y ]
[ Y V ] [ Y ] [ Y V ] [ Y ]
[ Y U ] [ Y ] [ Y U ] [ Y ]
[ Y V ] [ Y ] [ Y V ] [ Y ]
在这种采样方式下,还原出一个像素点,需要相邻的四个像素点数据,如下:
[ Y U ] [ Y ]
[ Y V ] [ Y ]
在同一采样模式下,根据分量元素排列顺序的不同,又分为不同的存储模式
◆ 各种存储格式如下:

音视频入门基础——笔记

文章插图
◆ 各种存储格式如下:
针对上图中的NV12、NV21、NV16、NV61说明:
◆NV:NV系列都属于semi-plane系列,“12”、“16”代表先U后V,“21”、“61”代表先V后U
◆ 12、16:代表一个像素占的位数
H264简介
1.什么是H.264
H.264是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准 。
2.H.264的数据格式是怎样的?
H.264由视频编码层(VCL)和网络适配层(NAL)组成 。
◆ VCL:H264编码/压缩的核心,主要负责将视频数据编码/压缩,再切分 。
◆ NALU = NALU+ NALU
3.VCL是如何管理H264视频数据?
◆压缩:预测(帧内预测和帧间预测)-> DCT变化和量化 -> 比特流编码;
◆切分数据,主要为了第三步 。"切片(slice)"、“宏块()"是在VCL中的概念,一方面提高编码效率和降低误码率、另一方面提高网络传输的灵活性 。
◆包装成『NAL』 。
◆『VCL』最后会被包装成『NAL』
4.NAL头的数据结构体
◆ F():1 位,初始为0 。当网络识别此单元存在比特错误时,可将其设为 1,以便接收方丢掉该单元
◆ NRI():2 位,用来指示该NALU 的重要性等级 。值越大,表示当前NALU越重要 。具体大于0 时取何值,没有明确规定
◆ Type():5 位,指出NALU 的类型,如下所示:
5.H.264码流结构
◆ H.264 =+ NALU(: or )
◆ 每个NAL前有一个起始码 0x00 00 01(或者0x00 00 00 01),解码器检测每个起始码,作为一个NAL的起始标识,当检测到下一个起始码时,当前NAL结束 。
◆ 同时H.264规定,当检测到时,也可以表征当前NAL的结束 。那么NAL中数据出现或时怎么办?H.264引入了防止竞争机制,如果编码器检测到NAL数据存在或时,编码器会在最后个字节前插入一个新的字节0x03,这样:
->
->
->
->
6.I帧、P帧和B帧
提到H.264,不得不提I帧、P帧、B帧、IDR帧、GOP 。
◆ I帧(Intra-coded ,帧内编码图像帧),表示关键帧,采用类似JPEG压缩的DCT(,离散余弦变换)压缩技术,可达1/6压缩比而无明显压缩痕迹;
◆ P帧(-coded ,前向预测编码图像帧),表示的是跟之前的一个关键帧或P帧的差别,P帧是参考帧,它可能造成解码错误的扩散;
◆ B帧(,双向预测编码图像帧),本帧与前后帧(I或P帧)的差别,B帧压缩率高,但解码耗费CPU;
◆ IDR帧(,即时解码刷新):首个I帧,是立刻刷新,使错误不致传播,IDR导致DPB(参考帧列表——这是关键所在)清空;在IDR帧之后的所有帧都不能引用任何IDR帧之前的帧的内容;IDR具有随机访问的能力,播放器可以从一个IDR帧播放 。
◆ GOP(Group Of ,图像序列):两个I帧之间是一个图像序列,一个GOP包含一个I帧