VCL(视频编码层)和 NAL(网络提取层).
VCL:包括核心压缩引擎和块,宏块和片的语法级别定义,设计目标是尽可能地独立于网络进行高效的编码。
NAL:负责将VCL产生的比特字符串适配到各种各样的网络和多元环境中,覆盖了所有片级以上的语法级别。
SODB👉RBSP(👉EBSP)👉NALU
//NALU单元之间用start_code间隔
NALU:Network Abstract Layer Unit 网络抽象层单元。
SODB:String Of Data Bits (原始数据比特流, 长度不一定是8的倍数,故需要补齐,是由VCL产生)。
RBSP:Raw Byte Sequence Payload 原始字节序列载荷
EBSP:扩展字节序列载荷(Encapsulated Byte Sequence Payload
//在h264的文档中,并没有EBSP这一名词出现,但是在h264的官方参考软件JM里,却使用了EBSP。
EBSP = RBSP + 防竞争处理(防竞争字节:0x03)
RBSP= SODB + RBSP trailing bits (若干比特“0”,以便字节对齐。)
//SODB以一个值为1的bit结尾,如果没有字节对齐,就用0补齐
//所以从后往前第一个值为1的位置就为,SODB的最后一个字节。
RBSP就是H.264编码后出来的裸流文件,给文件加上后缀.h264,得到xxx.h264
nalu结构
nalu_header:
NALU 单元= NALU Header + EBSP
NALU Header = F(1位禁止位,0表正常,1则错误👉丢弃) + NRI(2位重要标志位,11最重要) + Type(5位)
//例如:SPS 7=00111 序列参数集(SPS) 一般搭配重要性11→0x67
// PPS 8=01000 图像参数集(PPS) 一般搭配重要性11→0