H264码流中SEI数据结构

H264码流中SEI NAL数据结构

数据段 start code NRI payload type payload size UUID payload 结尾对齐码
数据 0x00 0x00 0x00 0x01 0x06 0x05 *** *** *** 0x80
长度 4 bytes 1 bytes 1 bytes 2 bytes 16 bytes N bytes 1 bytes

NAL说明:

网络抽象层(Network Abstract Layer)简称为NAL。在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(Video Coding Layer - VCL)和网络抽象层面(Network Abstraction Layer - NAL)。VCL负责表示有效视频数据的内容,NAL 负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。NAL unit是NAL的基本语法结构,它包含一个字节的头信息(NAL header)和一系列来自VCL的原始数据字节流(RBSP)。
参考:https://zhuanlan.zhihu.com/p/572239506

NAL unit type储存在NAL header中,在H.264/AVC标准中,可用的NAL unit type一共有17种,其中值为6时表征SEI 内容。比较常见的类型如下表所示:

image

H264码流中的SEI解析

image

1.NAL header

起始码(暗红底色)"0x00000001"分割出来的比特流即是NAL unit,起始码紧跟的第一个字节(墨绿底色)是NAL header。上图“NAL header”一共出现了四个数值:

"0x06",此时NRI为"00B",NAL unit type为SEI类型。
“0x67”,此时NRI为“11B”,NAL unit type为SPS类型。
“0x68”,此时NRI为“11B”,NAL unit type为PPS类型。
“0x65”,此时NRI为“11B”,NAL unit type为IDR图像。

2.SEI payload type

"0x06"后一个字节为“0x05”(淡黄底色)是SEI payload type,即表征SEI payload分析遵循user_data_unregistered()语法。

3.SEI payload size

“0x05”后一个字节为“0x2F”(淡蓝底色)是SEI payload size,此时整个payload是47个字节。

4.SEI payload uuid

"0x2F"随后的16个字节即为uuid,此时uuid为 dc45e9bd-e6d9-48b7-962c-d820d923eeef

5.SEI payload content

由于payload size是47个字节,除去16字节的uuid,剩下31个字节的content。由于content是字符串,所以有结束符"0x00",有效的30个字符内容是:
Zencoder Video Encoding System

6.rbsp trailing bits

47个payload字节后的"0x80"(灰底色)即是rbsp trailing bits,在user_data_unregistered()里面都是按字节写入的,所以此时的NAL unit结尾写入的字节一定是0x80。

posted on 2025-04-24 16:08  林西索  阅读(181)  评论(0)    收藏  举报