webRTC:如何告诉 Opus 编解码器使用超宽 band/full 频段

webRTC: How to tell Opus codec to use super wide band/full band

我正在开发一个 webRTC 网络应用程序,到目前为止它运行良好。我还没有弄清楚的是如何告诉 Opus 编解码器(强制)使用 "full band",例如。

为 510 kHz 比特率设置编解码器很容易:

desc.sdp=desc.sdp.replace(/a=mid:audio\r\n/g,'a=mid:audio\r\nb=AS:510\r\n');

但是有没有办法告诉 Opus 使用哪个频段?

指定波段还不错。使用 opus,您只需指定 MAX rate 功能并让它从那里 运行。默认情况下,OPUS 会达到其最大功能(48000,又名全频带)。

此外,请记住,无论您指定什么捕获速率,rtp 时钟速率都必须为 48000。

The below examples are taken from the rfc section-7.

m=audio 54312 RTP/AVP 101
a=rtpmap:101 opus/48000/2
a=fmtp:101 maxplaybackrate=16000; sprop-maxcapturerate=16000

这为 16kHz(又名宽带)的发送者指定了最大捕获和回放速率。

双向全波段立体声

m=audio 54312 RTP/AVP 101
a=rtpmap:101 opus/48000/2
a=fmtp:101 stereo=1; sprop-stereo=1

如果要指定首选频段,您最关心的选项是:

  • maxplaybackrate:关于最大输出采样率的提示 接收器能够以赫兹呈现。
  • sprop-maxcapturerate:关于最大输入采样率的提示 发件人可能会产生。

不同的波段及其受尊重的最大值:

  • NB:8 kHz
  • MB: 12 kHz
  • 白平衡:16 kHz
  • SWB:24 kHz
  • FB: 48 kHz //webrtc中默认的编解码器

另外请注意,比特率和采样率之间存在差异。您修改了比特率,这可能会迫使 Opus 更改采样率,但我显示的选项根本不会修改比特率,只会更改采样率。

Post 脚本,所有这些都取决于 webrtc 的实现,如果它真的关心 SDP 中指定的内容以及它是否真的影响作品 encoding/decoding。我注意到(在过去,它很可能已经改变)Firefox 中的实现根本不关心 SDP 中的内容,默认情况下它只做它想做的事。