H.264中一些比较实用的知识:
H264最大的好处就是网络的友好性,用于在互联网流媒体、监控、直播等多数行业内,H264虽然非常复杂,但一般项目实施中是不会涉及到和编码算法相关的工作的(如果需要编码h264的话可以了解一下x264和ffmpeg),基本上只了解h264的NALU相关的协议就够用了。
H264原始码流是一个接一个的NALU(网络抽象层单元)租成的,每个单元之间是由 0x00 0x00 0x00 0x01 或者 0x00 0x00 0x01分割而成的,紧接着就是NALU的单元头和数据体:
forbidden_bit(1bit):禁止位
nal_reference_bit:优先级
nal_unit_type:NALU的类型:
可以使用这个算法直接得出 type = nalubuf[4] & ((1 << 5) - 1);
和NALU相关的知识点总结:
(1)SPS和PPS是连续对出现的,后面可能紧跟着IDR片,也有可能是SEI(补偿增强信息单元),网上说使用ffmpeg编码yuv成h264时 SPS和PPS后面紧跟着的IDR,我没有检测过,我用Hi3516硬编码SPS和PPS后面紧跟着的是SEI。
(2)H264码流封装成视频文件时比如FLV,SEI单元和SEI单元后面的第一帧一同处理。
(3)AVC编码中的IPB帧概念相对应的是nalutype的1~5,单纯靠nalutype判断不出来IPB帧的类型,详细的可以看这篇大神的文章《H264的I/P/B帧类型判断(一)》
以后想到什么再加吧暂时只想到这么多。