跳到主要内容

7. SDP 定义

[RFC4585] 第 4 节定义了一个新的 SDP [RFC4566] 属性 rtcp-fb, 可用于协商处理特定 AVPF 命令和指示的能力, 例如 Reference Picture Selection, Picture Loss Indication 等. rtcp-fb 的 ABNF 在 [RFC4585] 第 4.2 节中描述. 本节扩展 rtcp-fb 属性, 以包含本文为 codec control 描述的命令和指示. 本节还讨论 codec control command 和 indication 对 Offer/Answer 的影响.

7.1. rtcp-fb 属性扩展

如 AVPF [RFC4585] 所述, rtcp-fb 属性表示使用 RTCP feedback 的能力. AVPF 规定 rtcp-fb 属性只能作为媒体级属性使用, 禁止在会话级提供. [RFC4585] 中关于 rtcp-fb 属性的 payload type 规则, 以及会话描述中存在多个 rtcp-fb 属性的规则, 同样适用于本备忘录定义的新反馈消息.

[RFC4585] 中定义的 rtcp-fb ABNF [RFC4234] 为:

"a=rtcp-fb: " rtcp-fb-pt SP rtcp-fb-val CRLF

其中 rtcp-fb-pt 是 payload type, rtcp-fb-val 定义反馈消息类型, 例如 ack, nack, trr-int 和 rtcp-fb-id. 例如, 为表示支持 Picture Loss Indication feedback, 发送方在 SDP 中声明如下:

v=0
o=alice 3203093520 3203093520 IN IP4 host.example.com
s=Media with feedback
t=0 0
c=IN IP4 host.example.com
m=audio 49170 RTP/AVPF 98
a=rtpmap:98 H263-1998/90000
a=rtcp-fb:98 nack pli

本文定义新的 feedback value "ccm", 表示支持使用 RTCP feedback message 进行 codec control. "ccm" feedback value 应当与表示所支持具体 codec control command 的参数一起使用. 本文定义四个此类参数:

  • "fir" 表示支持 Full Intra Request (FIR).
  • "tmmbr" 表示支持 Temporary Maximum Media Stream Bit Rate Request/Notification (TMMBR/TMMBN). 它有一个可选子参数, 用于指示要使用的 session maximum packet rate (以每秒数据包数衡量). 如果未包含该子参数, 默认值为无穷大.
  • "tstr" 表示支持 Temporal-Spatial Trade-off Request/Notification (TSTR/TSTN).
  • "vbcm" 表示支持 H.271 Video Back Channel Messages (VBCM). 它可以带零个或多个子参数, 用于标识支持的 H.271 "payloadType" 值.

在 [RFC4585] 定义的 rtcp-fb-val ABNF 中, 有一个名为 rtcp-fb-id 的占位符用于定义新的 feedback type. 本文把 "ccm" 定义为新的 feedback type, 并在此定义 ccm 参数的 ABNF (完整 ABNF 语法请参考 [RFC4585] 第 4.2 节).

rtcp-fb-val        =/ "ccm" rtcp-fb-ccm-param

rtcp-fb-ccm-param = SP "fir" ; Full Intra Request
/ SP "tmmbr" [SP "smaxpr=" MaxPacketRateValue]
; Temporary max media bit rate
/ SP "tstr" ; Temporal-Spatial Trade-Off
/ SP "vbcm" *(SP subMessageType) ; H.271 VBCMs
/ SP token [SP byte-string]
; for future commands/indications
subMessageType = 1*8DIGIT
byte-string = <as defined in section 4.2 of [RFC4585] >
MaxPacketRateValue = 1*15DIGIT

7.2. Offer-Answer

codec control protocol feedback message 对 Offer/Answer [RFC3264] 的影响, 与 [RFC4585] 中描述的影响相似. offerer 可以指示支持所选 codec command 和 indication 的能力. answerer 必须移除它不希望在该特定媒体会话中支持的 CCM 对应的所有 CCM 参数, 例如因为它没有实现相关消息, 或因为其应用逻辑认为支持该消息没有价值. answerer 禁止在 offer 中已有内容之外添加新的 ccm 参数.

answer 对媒体会话具有约束力, offerer 和 answerer 都禁止使用双方未明确指示支持的任何反馈消息. 换言之, 只能使用 offer 和 answer 中 CCM 参数的共同子集.

注意, 在 offer 或 answer 中包含 CCM 参数表示该方 (offerer 或 answerer) 至少能够接收对应 CCM, 并对其采取行动. 如果接收已协商 CCM 要求该方以另一个 CCM 响应, 它也必须具备该能力. 虽然规范不强制发起任何已协商类型的 CCM, 但通常期望一方在适当时发起 CCM.

TMMBR indication 中的 session maximum packet rate 参数部分是声明性的, 应使用 offer 和 answer 中的最高值. 如果 offer 中不存在 session maximum packet rate 参数, answerer 禁止包含该参数.

7.3. 示例

示例 1: 以下 SDP 描述一个使用 H.263 的点到点视频呼叫, 呼叫发起方声明其支持 FIR 和 TSTR/TSTN codec control message 的能力. 该 SDP 由 SIP 等高层信令协议承载.

v=0
o=alice 3203093520 3203093520 IN IP4 host.example.com
s=Point-to-Point call
c=IN IP4 192.0.2.124
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVPF 98
a=rtpmap:98 H263-1998/90000
a=rtcp-fb:98 ccm tstr
a=rtcp-fb:98 ccm fir

在上述示例中, 当发送方收到远端的 TSTR 消息时, 它能够按 RTCP TSTN feedback message 指示调整折中.

示例 2: 以下 SDP 描述一个 SIP 端点加入承载多方视频会议会话的 video mixer. 该参与者只支持 FIR (Full Intra Request) codec control command, 并在其会话描述中声明.

v=0
o=alice 3203093520 3203093520 IN IP4 host.example.com
s=Multiparty Video Call
c=IN IP4 192.0.2.124
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVPF 98
a=rtpmap:98 H263-1998/90000
a=rtcp-fb:98 ccm fir

当 video MCU 决定路由该参与者的视频时, 它发送 RTCP FIR feedback message. 端点收到该反馈消息后, 需要生成 full intra request.

示例 3: 以下示例描述 codec control message 对 Offer/Answer 的影响. offerer 希望支持 "tstr", "fir" 和 "tmmbr". 提供的 SDP 为:

-------------> Offer
v=0
o=alice 3203093520 3203093520 IN IP4 host.example.com
s=Offer/Answer
c=IN IP4 192.0.2.124
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVPF 98
a=rtpmap:98 H263-1998/90000
a=rtcp-fb:98 ccm tstr
a=rtcp-fb:98 ccm fir
a=rtcp-fb:* ccm tmmbr smaxpr=120

answerer 只希望支持 FIR 和 TSTR/TSTN 消息, answerer SDP 为:

<---------------- Answer

v=0
o=alice 3203093520 3203093524 IN IP4 otherhost.example.com
s=Offer/Answer
c=IN IP4 192.0.2.37
m=audio 47190 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 53273 RTP/AVPF 98
a=rtpmap:98 H263-1998/90000
a=rtcp-fb:98 ccm tstr
a=rtcp-fb:98 ccm fir

示例 4: 以下示例描述 H.271 Video Back Channel Messages (VBCM) 对 Offer/Answer 的影响. offerer 希望支持 VBCM, 以及 payloadType 为 1 (一个或多个画面全部或部分丢失) 和 2 (一个画面的一组块全部或部分丢失) 的子消息.

-------------> Offer
v=0
o=alice 3203093520 3203093520 IN IP4 host.example.com
s=Offer/Answer
c=IN IP4 192.0.2.124
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVPF 98
a=rtpmap:98 H263-1998/90000
a=rtcp-fb:98 ccm vbcm 1 2

answerer 只希望支持类型 1 子消息:

<---------------- Answer

v=0
o=alice 3203093520 3203093524 IN IP4 otherhost.example.com
s=Offer/Answer
c=IN IP4 192.0.2.37
m=audio 47190 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 53273 RTP/AVPF 98
a=rtpmap:98 H263-1998/90000
a=rtcp-fb:98 ccm vbcm 1

因此, 在上述示例中, 只支持由 "payloadType" 1 组成的 VBCM indication.