在处理RTP标头扩展的RFC 8285中,1字节标头扩展的结构如下所示(第4.2节):
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0xBE | 0xDE | length=3 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ID | L=0 | data | ID | L=1 | data...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
...data | 0 (pad) | 0 (pad) | ID | L=3 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
我了解RFC中说明的OxBEDE。然后是“ length = 3”位,后面是实际的扩展名。每个扩展名都由ID和长度组成。为两字节报头扩展定义了类似的结构。
在两种类型的标题中,我都不理解“ length = 3”位部分。它只是用于32位边界的填充吗?如果是这样,这有什么目的?易于解析?为什么不让扩展元素在xBEDE之后立即启动。当然可以节省空间。 可能是我缺少一些基本知识。
答案 0 :(得分:1)
这可能可以追溯到RFC 3550。像这样显式地指定长度字段,可使不了解扩展名的客户端更轻松地跳过它们。 还要注意,除非通过RFC 5285进行扩展(由8285更新),否则只能有一个扩展,因此您看到的是向后兼容性黑客。