标准定义

RFC 3550

RTP标准头

字段占用(bit)说明
version2版本号,一般默认是2
padding1是否填充标志。为1表示填充,在RTP包的末尾会填充数据。填充的长度由RTP包的最后一个字节指定,不包含最后一个字节
extension1版本号,一般默认是2
CSRC count4CSRC计数器
marker1一种标识。视频包时:表示一帧的结束(一帧的最后一个RTP包该值为1)。音频包时:表示会话开始,也就是第一个音频的RTP包
payload type7载荷类型。H264或H265该值一般为96(0x96)
sequence number16RTP包的序号
timestamp32时间戳。视频包的时间戳时钟频率固定位90000HZ,音频包的时间戳根据采样率变化
SSRC32同步信源标识符。一个RTP会话中,不会存在两个相同的SSRC值。比如一个会话中的视频包和音频包的SSRC值都是不同的

RTP拓展头

字段占用(bit)说明
defined by profile16拓展数据类型,一般自定义
length16拓展数据长度,不包含defined by profile和length字段的占用
header extensionlength * 8拓展数据内容

H264 RTP封装

H264 Nalu单元头

比特位字段名称长度含义
7forbidden_zero_bit1 bit禁止位。通常为 0。如果网络传输中发现比特错误,可能会将其置为 1,接收端据此丢弃该包。
5-6nal_ref_idc2 bits参考级别。表示该 NALU 的重要性(0-3)。值越大越重要,解码器在处理不过来时可丢弃低优先级的包。
0-4nal_unit_type5 bitsNALU 类型。这是最核心的字段,定义了 Payload 中装的是什么数据(如 I 帧、P 帧、SPS、PPS 等)。

常见头部字节

十六进制值二进制拆解 (F + NRI + Type)类型名称说明
0x670 11 00111SPS序列参数集,包含分辨率等全局信息,优先级最高 (NRI=3, Type=7)。
0x680 11 01000PPS图像参数集,包含解码一幅图像所需的参数,优先级高 (NRI=3, Type=8)。
0x650 11 00101IDR关键帧(I 帧),解码的起点,优先级高 (NRI=3, Type=5)。
0x610 11 00001P 帧非 IDR 图像片(通常是 P 帧),用于参考 (NRI=3, Type=1)。
0x410 10 00001P 帧非 IDR 图像片,优先级稍低 (NRI=2, Type=1)。
0x010 00 00001B 帧非 IDR 图像片(通常是 B 帧),不可用于参考 (NRI=0, Type=1)。
0x060 00 00110SEI补充增强信息,如时间戳、用户数据等 (NRI=0, Type=6)。

载荷

NAL Unit TypePacket Type Name说明
0未指定保留 (Reserved)
1非 IDR 片Coded slice of a non-IDR picture (P帧/B帧)
2切片数据分区 ACoded slice data partition A
3切片数据分区 BCoded slice data partition B
4切片数据分区 CCoded slice data partition C
5IDR 片Coded slice of an IDR picture (关键帧 I帧)
6补充增强信息Supplemental enhancement information (SEI)
7序列参数集Sequence parameter set (SPS)
8图像参数集Picture parameter set (PPS)
9访问单元分隔符Access unit delimiter
10序列结尾End of sequence
11流结尾End of stream
12填充数据Filler data
13序列参数集扩展Sequence parameter set extension
14切片层扩展Prefix NAL unit
15子序列参数集Subset sequence parameter set
16保留Reserved (用于深度参数集等)
17保留Reserved
18切片层扩展Sliced layer extension
19 - 23保留Reserved
24STAP-ASingle-time aggregation packet (单时间聚合包)
25STAP-BSingle-time aggregation packet (单时间聚合包)
26MTAP16Multi-time aggregation packet (多时间聚合包, 16位偏移)
27MTAP24Multi-time aggregation packet (多时间聚合包, 24位偏移)
28FU-AFragmentation unit (分片单元 A, 最常用)
29FU-BFragmentation unit (分片单元 B)
30保留Reserved
31保留Reserved

单一分包模式

RTP包头后面直接+H264的裸数据(去除起始码),比如SPS和PPS这种小于一个RTP包大小的就直接封装为一个RTP包

聚合包

  • 暂无

切片包(FU-A)

对于一帧数据大于一个RTP包的大小的,就需要采用RTP分包的策略。这时候H264的NALU头中的nal_unit_type值固定位28(表示FU-A),这个字节也被称为(FU indicator),后面接着的是分片单元头(FU header),然后是去掉H264 Nalu头的数据依次放入多个RTP包中

分片单元头(FU header)

比特位字段名称长度(bit)含义
7S (Start)1起始位。设置为 1 时,表示这是被分片 NALU 的第一个 RTP 包。
6E (End)1结束位。设置为 1 时,表示这是被分片 NALU 的最后一个 RTP 包。
5R (Reserved)1保留位。发送时必须设置为 0,接收时必须忽略。
0-4Type5类型。该字段的值与原始 NALU 的类型完全相同。例如,如果分片的是一个 I 帧(NALU Type 5),那么这里的 Type 值也是 5。

H265 RTP封装

H265 Nalu单元头

比特位字段名称长度含义
15forbidden_zero_bit1 bit禁止位。必须为 0。如果为 1 表示语法违规或传输错误。
9-14nal_unit_type6 bitsNALU 类型。这是核心字段,定义了数据内容(如 VPS, SPS, IDR, TRAIL 等)。
3-8nuh_layer_id6 bits层级 ID。用于可伸缩视频编码(SVC)或 3D 视频,普通视频中通常为 0。
0-2nuh_temporal_id_plus13 bits时域 ID + 1。表示该 NALU 所属的时间层。值为 0 是非法的,通常至少为 1。

常见头部字节

类型名称Type 值典型头部 (Hex)说明
VPS3240 01视频参数集。H.265 特有,包含多图层配置。
SPS3342 01序列参数集。包含分辨率、位深等信息。
PPS3444 01图像参数集。包含切片头、量化参数等。
IDR19/2026 01 / 28 01关键帧。Type 19 (IDR_W_RADL) 或 Type 20 (IDR_N_LP)。
CRA212A 01清理随机访问。类似 I 帧,用于随机接入点。
TRAIL0/100 01 / 02 01普通帧 (P/B 帧)。Type 0 (非参考) 或 Type 1 (参考)。
SEI39/404E 01 / 50 01辅助信息。Type 39 (前缀) 或 Type 40 (后缀)。

载荷

类型值名称类别说明
0TRAIL_NVCL普通非参考切片 (Trailing non-reference)
1TRAIL_RVCL普通参考切片 (Trailing reference)
2TSA_NVCL时间子层访问 - 非参考 (Temporal Sub-layer Access)
3TSA_RVCL时间子层访问 - 参考
4STSA_NVCL逐步时间子层访问 - 非参考
5STSA_RVCL逐步时间子层访问 - 参考
6RADL_NVCL随机访问可解码前导图 - 非参考
7RADL_RVCL随机访问可解码前导图 - 参考
8RASL_NVCL随机访问跳过前导图 - 非参考
9RASL_RVCL随机访问跳过前导图 - 参考
10-15RSV_VCLVCL保留 (Reserved)
16BLA_W_LPVCL断链访问 - 低延迟 (Broken Link Access)
17BLA_W_RADLVCL断链访问 - 带RADL
18BLA_N_LPVCL断链访问 - 无前导图
19IDR_W_RADLVCL关键帧 - 带RADL (Instantaneous Decoding Refresh)
20IDR_N_LPVCL关键帧 - 无前导图 (纯IDR)
21CRA_NUTVCL清理随机访问 (Clean Random Access)
22-23RSV_IRAPVCL保留 IRAP (Reserved Intra Random Access Point)
24-31RSV_VCLVCL保留非IRAP VCL
32VPS_NUTNon-VCL视频参数集 (Video Parameter Set)
33SPS_NUTNon-VCL序列参数集 (Sequence Parameter Set)
34PPS_NUTNon-VCL图像参数集 (Picture Parameter Set)
35AUD_NUTNon-VCL访问单元分隔符 (Access Unit Delimiter)
36EOS_NUTNon-VCL序列结束 (End of Sequence)
37EOB_NUTNon-VCL比特流结束 (End of Bitstream)
38FD_NUTNon-VCL填充数据 (Filler Data)
39PREFIX_SEINon-VCL前缀 SEI (Supplemental Enhancement Info)
40SUFFIX_SEINon-VCL后缀 SEI
41-47RSV_NVCLNon-VCL保留 (Reserved)
48-63UNSPECNon-VCL未指定 (Unspecified)

单一分包模式

RTP包头后面直接+H265的裸数据(去除起始码),比如SPS和PPS这种小于一个RTP包大小的就直接封装为一个RTP包

聚合包

  • 暂无

切片包(FU-A)

对于一帧数据大于一个RTP包的大小的,就需要采用RTP分包的策略。这时候H265的NALU头中的nal_unit_type值固定位28(表示FU-A),然后第二个字节保持不变,这两个字节也被称为(PayloadHdr),后面接着的是分片单元头(FU header),然后是去掉H265 Nalu头的数据依次放入多个RTP包中

分片单元头(FU header)

比特位字段名称长度(bit)含义
7S (Start)1起始位。设置为 1 时,表示这是被分片 NALU 的第一个 RTP 包。
6E (End)1结束位。设置为 1 时,表示这是被分片 NALU 的最后一个 RTP 包。
0-5FuType6分片类型。该字段的值与原始 NALU 的类型完全相同。例如,如果分片的是一个 IDR 帧(NALU Type 19),那么这里的 FuType 值也是 19。