RTP扩展头
WebRTC 通常使用 UDP 传输数据,在 UDP 之上传输的是 RTP 报文,由 Header 和 Body 两部分组成。Header 又包括常规 Header 和扩展 Header,了解扩展 Header 对于理解 WebRTC 传输是非常关键的。那么 WebRTC 的 RTP Header 中都包括哪些扩展 Header 呢?这些扩展 Header 的具体格式又是什么呢?
实际上这些信息保存在 SDP 中,下面看一个具体的例子,如代码 7.9 所示,这段 SDP 代码中描述了不同类型媒体的 RTP 扩展头信息。
代码7.9 RTP扩展头
...
m=audio ...
...
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
...
m=video ...
...
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
...
在这段 SDP 代码中,出现了一个新属性 “a=extmap”,extmap 是 extension map 的缩写,即 RTP Header 扩展映射表。该属性在 RFC8285 中做了详细的说明,如果读者想了解该属性更多的细节,可以查阅该规范。
“a=extmap” 属性的具体格式如下:
a=extmap:<value >["/"<direction >] <URI > <extensionattributes >
按其格式再回看代码 7.9,“a=extmap” 属性所携带的内容格式为 “值:URI”,我们可以将它们整理成一个表格,如表 7.1 所示。

Figure 1. 表7.1 RTP扩展头
表 7.1 中的 URI 是 RTP 扩展头对应值的规范说明,比如说 trasport-cc 扩展头的值为 3,扩展头的格式及含义都记录在 http://www.ietf.org/id/draft-holmer-rmcat-transportwide-cc-extensions-01 中。
对于 RTP 而言,它的扩展头是以 32 位的整数倍增加的,即每个扩展头最小是 4 个字节。至于 WebRTC 是如何使用这些扩展头的,将会在第 9 章中详细介绍。