知识卡片

字节填充避免载荷数据与帧起始码冲突

专业/工作 · 1080.c

内容

H.265/HEVC在字节流中用固定的比特序列0x000001作为NALU的起始码来标记每个单元的边界。但压缩数据本身是任意比特组合,载荷内部完全可能碰巧出现0x000000或0x000001这样的字节序列,如果不处理就会被错误地当成边界标记,导致解析错位。标准的解法是”冲突避免”:在编码时扫描原始字节流,只要发现连续两个0x00后面紧跟0x00、0x01或0x02,就在中间插入一字节0x03,解码时再原样删除这个插入的0x03。这是帧定界协议里的经典技术——用一段专属比特模式标记边界时,必须先保证这段模式不会在载荷内容中意外出现,做法通常是主动转义/填充载荷中和边界模式相似的片段,PPP的字符转义、HDLC的比特填充都是同一思路的变体。

参考来源

《新一代高效视频编码H.265/HEVC:原理、标准与实现》第9章《网络适配层》