跳到主要内容

10.2 One of N Codec Selection (N 选 1 编解码器选择)

10.2 One of N Codec Selection (N 选 1 编解码器选择)

在嵌入式电话中的一种常见情况是, 用于压缩的数字信号处理器 (Digital Signal Processor, DSP) 可以同时支持多种编解码器, 但一旦选定某种编解码器, 便难以在运行中随意更换. 本示例说明如何通过一次初始 offer/answer 交换, 紧接着再进行第二次交换, 以锁定编解码器集合.

Alice 向 Bob 发出的初始 offer 指明一条单一音频流, 其中列出 DSP 中可用的三种音频编解码器. 该流标记为 inactive, 因为在编解码器锁定之前无法接收媒体:

v=0
o=alice 2890844526 2890844526 IN IP4 host.anywhere.com
s=
c=IN IP4 host.anywhere.com
t=0 0
m=audio 62986 RTP/AVP 0 4 18
a=rtpmap:0 PCMU/8000
a=rtpmap:4 G723/8000
a=rtpmap:18 G729/8000
a=inactive

Bob 可以在 PCMU 与 G.723 之间动态切换. 因此, 他发送如下 answer:

v=0
o=bob 2890844730 2890844731 IN IP4 host.example.com
s=
c=IN IP4 host.example.com
t=0 0
m=audio 54344 RTP/AVP 0 4
a=rtpmap:0 PCMU/8000
a=rtpmap:4 G723/8000
a=inactive

Alice 随后可以在这两种编解码器中任选其一. 因此, 她发送带有 sendrecv 流的更新 offer:

v=0
o=alice 2890844526 2890844527 IN IP4 host.anywhere.com
s=
c=IN IP4 host.anywhere.com
t=0 0
m=audio 62986 RTP/AVP 4
a=rtpmap:4 G723/8000
a=sendrecv

Bob 接受该单一编解码器:

v=0
o=bob 2890844730 2890844732 IN IP4 host.example.com
s=
c=IN IP4 host.example.com
t=0 0
m=audio 54344 RTP/AVP 4
a=rtpmap:4 G723/8000
a=sendrecv

若 answerer (Bob) 只能支持 N 选 1 的编解码器, Bob 会从 offer 中选择一种编解码器, 并将其放入他的 answer. 此时, Alice 将执行 re-INVITE 以使用该编解码器激活该流.

作为在第一轮交换中使用 a=inactive 的替代做法, Alice 可以列出全部编解码器, 并在一旦收到来自 Bob 的媒体后, 立即生成更新 offer, 将编解码器锁定为刚收到的那种. 当然, 若 Bob 仅支持 N 选 1 的编解码器, 则他的 answer 中只会有一种编解码器, 此时便无需通过 re-INVITE 再锁定为单一编解码器.