webRTC:如何告诉Opus编解码器使用超宽带/全带

Arm*_*ter 5 webrtc opus

我正在开发一个webRTC Web应用程序,到目前为止工作得非常好.我还没想到的是如何告诉Opus编解码器(强制)使用"全频段".

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

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

但有没有办法告诉Opus使用哪个乐队?

Ben*_*ent 5

指定频段还不错。使用opus,您只需指定最大速率功能,然后从那里运行即可。默认情况下,OPUS会发挥其最大功能(48000,又称全频段)。

另外,请记住,无论您指定哪种捕获速率,rtp时钟速率都必须为48000。

以下示例取自rfc部分7

m=audio 54312 RTP/AVP 101
a=rtpmap:101 opus/48000/2
a=fmtp:101 maxplaybackrate=16000; sprop-maxcapturerate=16000
Run Code Online (Sandbox Code Playgroud)

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

两路全频带立体声

m=audio 54312 RTP/AVP 101
a=rtpmap:101 opus/48000/2
a=fmtp:101 stereo=1; sprop-stereo=1
Run Code Online (Sandbox Code Playgroud)

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

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

不同的乐队和他们尊重的最大:

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

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

脚本发布后,所有这一切都取决于webrtc的实现,以及它是否实际上关心SDP中指定的内容以及它是否实际上影响了opus编码/解码。我已经注意到(过去,它可能已经发生了很大的变化),Firefox中的实现并不会在乎SDP中的内容,而是会默认执行它想要的操作。