简介
在RTC3550中提供了一种可扩展RTP头的能力。定义如下图,现有的报头扩展方法允许每个RTP分组最多有一个扩展,由16位标识符和16位长度字段标识,该字段以32位指定报头扩展的长度。
这种机制有两个弊端:第一在一个RTP包中只能提供一个扩展头,第二规范并没有给出如何分配16位头扩展标识符以避免冲突的指导。
本规范通过定义一种向后兼容和可扩展的方法来在单个RTP分组中携带多个报头扩展元素,从而消除了第一个缺点。通过定义这些扩展元素来消除第二个缺点,这些扩展元素使用URLs命名,在IETF中定义一个 IANA的注册表,使用SDP方法来映射注册表和标识符之间的对应关系。
于是在RFC-5285对头扩展进行了优化
扩展头
- defined by profile:决定使用哪种Header Extension
- one-byte header方式,defined by profile等于0xBEDE
- two-byte header方式,defined by profile等于0x1000
- length:表示Header Extension的长度:length x 4字节
One-Byte Header
如果是One-Byte Header方式封装,则defined by profile的值为0xBEDE。
每一个扩展项都是以1个字节的ID和长度开始,后面跟着具体的数据,如下图:
- ID: 4bit 标示本地标示,有效范围为1-14
- len: 4bit 标示长度范围:0~15,为0表示长度为1字节,15表示16字节
栗子
two-byte header
如果是two-byte header方式封装,则defined by profile的值为0x1000。
**appbits:**字段为4位,取决于应用程序,可定义为任何值或含义,不在本规范范围内。出于发信号的目的,此字段被视为分配给本地标识符256的特殊扩展值。如果未通过配置或发信号为此本地标识符256指定扩展,则发送方应将appbits字段设置为所有0,接收方必须忽略该字段。
后面每个扩展选项的定义如下:
主要是ID和length的长度的区别