RTP header中的“X”位如果置“1”, 则表示该header含有扩展信息. 扩展信息回存放在正常header尾部位置.
-
profile : 占2个字节
-
profile值为0xBE、0xDE, 说明扩展项的ID和len占1个字节, 即ID占4位 length占4位
-
profile值为0x10、0x0X(“X”表示任意数, 一般为“0”, 即0x00), 说明扩展项的ID和len占2个字节, 即ID占8位 length占8位
-
length : 表示后面跟着的扩展头信息有几个字节
-
扩展头长度以4字节为单位
-
例如: length = 3, 说明扩展头长度占12字节
不同字节长度的扩展头结构
- profile值为0xBE、0xDE, header占一个字节, 这里说的header就是header exrension中的每一个扩展项的header
- profile值为0x10、0x0X, header占两个字节, header解释同上
profile值为0xBE、0xDE的扩展头
-
profile值为 : 0xBE、0xDE 说明每一个扩展项的header占一个字节
-
length = 3 : 说明总的长度为12字节(3 * 4)
-
每一个扩展项的length+1 表示后面data的真实长度, 例如L=0 , 表示data长度为(0+1)个字节
-
length=3, 即长度为12个字节, 但是3个扩展项总的数据只有10个字节, 所以末尾两个字节填充 0
profile值为0x10、0x0X的扩展头
-
profile值为 : 0x10、0x0X 说明每一个扩展项的header占两个字节
-
length = 3 : 说明总的长度为12字节(3 * 4)
-
每一个扩展项的length表示后面data的真实长度, 例如L=0 , 表示data长度为0个字节, 这里与header为一个字节的扩展头是有区别的
-
数据长度不足, 仍然用0在末尾填充
WebRTC用到的扩展头
-
扩展头的详细信息 : src/api/rtp_parameters.h 中的Rtp Extension结构
-
具体实现逻辑 : src/api/rtp_parameter.cc
-
每个扩展项的具体含义 : src/modules/rtp_rtcp/source/rtp_header_extensions.cc
完整的RTP头
-
P : 表示是否有填充位信息
-
如果有,说明不是32位对齐的, 存在空位用0填充
-
填充长度要到最后一个字节:Padding Size 获取, 如果读取到Padding Size = 5, 表示填充长度为5个字节, 而且其中包括Padding Size本身
-
X : 表示是否有扩展头
-
上图中的黄色区域为扩展信息的位置
-
每一项扩展信息都会存放在header extension中
-
profile的值直接跟header extension中每一项扩展的header长度相关
-
length表示header extension的长度, 以4字节为一个单位
-
CC : Contributing source(SCRC)的个数
-
M : 表示该包为一帧数据分包之后的最后一个包
-
PT : 表示负载数据的类型: video/audio
-
Seq Number : 包的序列号, 在一定数值范围内循环线性递增
-
timestamp : 包的时间戳, 同一帧数据拆分的包的时间戳都相同
-
SSRC : 该包负载的数据源的标识