我正在开发一个到目前为止运行良好的 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');
但是有没有办法告诉 Opus 使用哪个乐队?
指定乐队并不是那么糟糕。使用 opus,您只需指定 MAX 速率功能并让它从那里运行。默认情况下,OPUS 会达到其最大功能(48000,又名全频带)。
另外,请记住,无论您指定什么捕获速率,rtp 时钟速率都必须为 48000。
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
如果您想指定首选频段,您最关心的选项是:
不同的乐队及其受人尊敬的最大值:
另外,请注意,比特率和采样率之间存在差异。您修改了可能迫使 Opus 更改采样率的比特率,但我展示的选项根本不会修改比特率,只会更改采样率。
Post Script,所有这一切都取决于 webrtc 实现,以及它是否真的关心 SDP 中指定的内容以及它是否真的影响 opus 编码/解码。我注意到(在过去,它很可能已经改变了)Firefox 中的实现并不关心 SDP 中的内容,而是默认执行它想要的操作。