1

根据此公告:“在最新的 Chrome Canary 版本中,默认的 RTCP 多路复用策略是“要求”,而不是“协商”。这将影响下一个 Chrome 版本,M57。”

我正在使用 sipml5 API 进行 webrtc 调用(后端是 Asterisk)。当我尝试从 webrtc 扩展程序拨打电话时,我在 chrome 控制台中收到此错误并且没有音频。

onSetRemoteDescriptionError

DOMException: Failed to set remote answer sdp: Session error code: ERROR_CONTENT. 
Session error description: rtcpMuxPolicy is 'require', but media description does not contain 'a=rtcp-mux'..

那么如何在 sipml5 中将 rtcpMuxPolicy 设置为“协商”?

  • 我的 chrome 版本:58.0.3026.3 开发(64 位)
  • SIPML5 API 版本:2.0.3
  • 星号版本:13.11.0
4

1 回答 1

1

在互联网上挖掘了很长时间后,我发现了以下几点,

引用自星号论坛: https ://issues.asterisk.org/jira/browse/ASTERISK-26732

Chrome 57 在与 WebRTC 网关的互操作方面发生了重大变化。当涉及到 rtcp-mux 时,他们已经将之前的“协商”更改为“要求”。据我了解,Asterisk 没有 rtcp 多路复用,因此在支持 WebRTC 的所有 Asterisk 版本中与 WebRTC 的兼容性时会中断。

chrome中的rtcpMuxPolicy参考:https ://www.chromestatus.com/feature/5654810086866944

应用程序使用 rtcpMuxPolicy 来指定其关于使用 RTP/RTCP 多路复用的首选策略。当策略为“协商”时,将收集 RTP 和 RTCP 的 ICE 候选者。如果远程端点能够复用 RTCP,则在 RTP 候选上复用 RTCP。如果不是,请分别使用 RTP 和 RTCP 候选。

根据谷歌论坛 - https://groups.google.com/forum/#!topic/discuss-webrtc/eM57DEy89MY

在最新的 Chrome Canary 版本中,默认的 RTCP 多路复用策略是“require”,而不是“negotiate”。这将影响下一个 Chrome 版本 M57。这意味着与不支持 RTCP 多路复用的端点的提供/应答协商将失败,从而导致错误:“ERROR_CONTENT。会话错误描述:无法设置 RTCP 多路复用器过滤器。” 我们可能可以使这个错误更具描述性,但最重要的是,如果 SDP 不包含“a=rtcp-mux”,setRemoteDescription 将失败。对于尚不支持 RTCP 多路复用的任何应用程序,您可以通过在 RTCConfiguration 中将 RTCRtpMuxPolicy 显式设置为“协商”来获得旧行为。例如: pc = new RTCPeerConnection({rtcpMuxPolicy: "negotiate"})

简而言之,

  • 在以前版本的 chrome rtcp 多路复用设置为“协商”
  • 从版本 57 开始,chrome 将 rtcp 多路复用更改为 'require'
  • 星号,据我了解,它不支持 rtcp 多路复用。
  • webrtc 允许 RTCRtpMuxPolicy 标志选项“协商”和“要求”
  • 据我了解,在 Sipml5 API 2.0.3 中,没有设置 RTCRtpMuxPolicy 的选项。

解决方案:我将 sipml5 api 从 2.0.3 更新到 2.1.3。现在错误变为警告。

[Deprecation] The rtcpMuxPolicy option is being considered for removal and may be removed no earlier than M60, around August 2017. If you depend on it, please see https://www.chromestatus.com/features/5654810086866944 for more details.

现在一切正常。

于 2017-03-10T13:40:15.567 回答