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

webRTC:如何告诉Opus编解码器使用超宽带/全频段,webrtc,opus,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'); 但是有没有办法告诉Opus使用哪个乐队呢?指定乐队并没有那么糟糕。对于opus,您只需指定最大速率功能,然后让它从那里运行。默认情况下,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');

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

指定乐队并没有那么糟糕。对于opus,您只需指定最大速率功能,然后让它从那里运行。默认情况下,OPUS将达到其最大容量(48000,又称全频段)

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

为发送方指定16kHz(又称宽带)的最大捕获和回放速率

双向全波段立体声

m=audio 54312 RTP/AVP 101
a=rtpmap:101 opus/48000/2
a=fmtp:101 stereo=1; sprop-stereo=1
如果要指定首选波段,您最关心的选项有:

  • maxplaybackrate:关于所需最大输出采样率的提示 接收器能够以Hz为单位进行渲染
  • sprop maxcapturerate:关于最大输入采样率的提示 发送方可能会提供的信息
不同的乐队和他们尊敬的max:

  • 注:8千赫
  • MB:12千赫
  • WB:16千赫
  • SWB:24千赫
  • FB:48 kHz//webrtc中的编解码器默认值
另外,请注意,比特率和采样率之间存在差异。您修改了比特率,这可能会迫使Opus更改采样率,但我显示的选项根本不修改比特率,只更改采样率


Post脚本,所有这些都取决于webrtc实现,以及它是否真正关心SDP中指定的内容,以及它是否实际影响opus编码/解码。我已经注意到(在过去,它很可能已经改变)Firefox中的实现并不关心SDP中的内容,只是默认地做它想要做的事情

非常感谢。我希望这些设置能消除我经常听到的音频伪影(以及音乐中的节奏变化)。您知道是否有更好的/标准的方法来修改sdp字符串,而不是查找和替换某些部分吗?@ArminHierstetter,我知道有一些重量较轻的sdp解析器可以工作,但在本地设置并发送sdp之前替换sdp中的字符串是我所知道的在WebRTC的浏览器实现中执行此操作的唯一方法technologies@ArminHierstetter,您还可以通过确保使用恒定比特率(也可以在SDP中设置,请参阅所提到的rfc)来防止比特率下降或上升。那么星号中的opus 8000/1呢?星号中是否有可能出现窄带宽?@Avanibadheka这个问题与星号无关,如果你有星号特定的问题…你应该发布一个新问题
m=audio 54312 RTP/AVP 101
a=rtpmap:101 opus/48000/2
a=fmtp:101 stereo=1; sprop-stereo=1