网络适配层:将编码好的数据进行:划分、封装、标识,从而适应网络。
视频编码完是VCL层,然后去NAL层包装成各个NALU,再去网络中传输。
适应网络的原因:
不同的网络环境:有线网络的最大传输单元1500字节,无线网络小得多;
不同的应用需求:直播类对实时性要求高的情况用UDP,注重完整性和正确性的用TCP/IP。
适应网络的方式:
将视频压缩数据划分成不同特性的NAL单元,即NALU,进行封装并标识内容特性在NALU头信息中显示优先级。
网络拥塞时不得不丢弃分组时,解析NALU头,不要丢弃优先级高的,如被参考的图像、头信息等。
NALU的组成:
NALU头:承载NALU载荷的内容特征,如被参考的图像数据,部分参数集信息,序列结束信息等。
NALU载荷(即经过冲突避免的RBSP):包含slice数据、部分参数集信息、结束符等数据。
H.265码流:
视频编码输出的压缩数据比特流片段称为SODB
(String Of Data Bits),它为最高位有效存储形式,也就是“我们编出来的东西”。
在SODB
后添加RBSP载荷尾
就生成了 RBSP
(Raw Byte Sequence Payload,原始字节序列载荷),可以包含一个 SS 的压缩数据,也可以是 VPS、SPS、PPS 等信息。
RBSP
前面加上NALU头信息
就是一个NALU
。若要形成码流,在NALU
前加上开始码StartCodePrefix
得到一段码流。
StartCodePrefix
是开始码,标记一个NALU的开始。有以下两种方式: Annex B和HVCC,其中Annex B在NALU前加0x000001或者0x00000001 ,HVCC则在NALU前加上指示其长度的前缀
NALU header:
其中NALType指示该NALU为何种类型,如是VPS?SPS?IDR?等
简单来说,SODB
前面加个头后面加个尾,就是NALU,一堆NALU在前面加上起始比特排列在一起就是码流了。
H265 BitsStream = StartCodePrefix +NALU
+ StartCodePrefix +NALU
+ ......
NALU = NALU header (2 bits) + RBSP
RBSP = SODB + RBSP trailing bits
对码流的解码: