在互联网上挖掘了很长时间后,我发现了以下几点,
引用自星号论坛: 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.
现在一切正常。