一、h.264码流分为两种格式:字节流格式和RTP包格式。
(1)字节流格式:这是在h264官方协议文档中规定的格式,处于文档附录B(Annex-B Byte stream format)中。所以它也成为了大多数编码器,默认的输出格式。它的基本数据单位为NAL单元,也即NALU。为了从字节流中提取出NALU,协议规定,在每个NALU的前面加上起始码:0x000001或0x00000001(0x代表十六进制)。这种由于没有经过传输协议封装,也称作裸流。
(2)RTP包格式:这种格式并没有在h264中规定,那为什么还要介绍它呢?是因为在h264的官方参考软件JM里,有这种封装格式的实现。在这种格式中,NALU并不需要起始码Start_Code来进行识别,而是在NALU开始的若干字节(1,2,4字节),代表NALU的长度。
二、NALU = NALU Header + EBSP
NALU Header共占据一个字节:
1) forbidden_zero_bit,占1位,h264文档规定,这个值应该为0,当它不为0时,表示网络传输过程中,当前NALU中可能存在错误,解码器可以考虑不对这个NALU进行解码。
2) nal_ref_idc,占2位,取值0~3,代表当前这个NALU的重要性,取值越大,代表当前NALU越重要,就需要优先被保护。尤其是当前NALU为图像参数集、序列参数集或IDR图像时&#