sipML5 — согласование rtcpMuxPolicy

Согласно этому объявлению: "По состоянию на последнюю версию Chrome В сборке Canary политика мультиплексирования RTCP по умолчанию — «требовать», а не «согласовывать». Это повлияет на следующий выпуск Chrome, M57».

Я использую API sipml5 для вызовов webrtc (Back end — 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'..

Итак, как я могу настроить rtcpMuxPolicy на «согласование» в sipml5?

  • Моя версия Chrome: 58.0.3026.3 dev (64-разрядная версия)
  • Версия API SIPML5: 2.0.3
  • Версия Астериска: 13.11.0

person Sibin John Mattappallil    schedule 09.03.2017    source источник


Ответы (1)


После долгого рытья в инете нашел следующие пункты,

Цитата с форума звездочки: https://issues.asterisk.org/jira/browse/ASTERISK-26732

В Chrome 57 есть критическое изменение, когда речь идет о взаимодействии со шлюзами WebRTC. Они изменили свое предыдущее «согласование» на «требовать», когда дело доходит до rtcp-mux. Asterisk, насколько я понимаю, не имеет мультиплексирования rtcp и поэтому сломается, когда дело доходит до совместимости с WebRTC во всех версиях Asterisk, поддерживающих WebRTC.

Ссылка на rtcpMuxPolicy в Chrome: https://www.chromestatus.com/feature/5654810086866944

rtcpMuxPolicy используется приложением для указания предпочтительной политики в отношении использования мультиплексирования RTP/RTCP. Когда политика «согласованная», будут собраны кандидаты ICE как для RTP, так и для RTCP. Если удаленная конечная точка способна мультиплексировать RTCP, мультиплексируйте RTCP на кандидатах RTP. Если это не так, используйте кандидатов RTP и RTCP по отдельности.

Согласно форуму группы Google - https://groups.google.com/forum/#!topic/discuss-webrtc/eM57DEy89MY

Что касается самой последней сборки Chrome Canary, политика мультиплексирования RTCP по умолчанию — «требовать», а не «согласовывать». Это повлияет на следующий выпуск Chrome, M57. Это означает, что согласование предложения/ответа с конечной точкой, которая не поддерживает мультиплексирование RTCP, завершится ошибкой: «ERROR_CONTENT. Описание ошибки сеанса: не удалось настроить фильтр мультиплексирования RTCP». Вероятно, мы можем сделать эту ошибку более описательной, но суть в том, что setRemoteDescription завершится ошибкой, если SDP не содержит «a=rtcp-mux». Для любого приложения, которое еще не поддерживает мультиплексирование RTCP, вы можете получить старое поведение, явно установив для RTCRtpMuxPolicy значение «согласование» в RTCConfiguration. Например: pc = new RTCPeerConnection({rtcpMuxPolicy: "согласование"})

Вкратце,

  • В предыдущих версиях мультиплексирования chrome rtcp установлено значение «согласование».
  • Начиная с версии 57, хром изменил мультиплексирование rtcp на «требовать».
  • Астериск, насколько я понял, не поддерживает мультиплексирование rtcp.
  • webrtc разрешает параметры флага RTCRtpMuxPolicy «согласовывать» и «требовать»
  • В Sipml5 API 2.0.3, насколько я понял, нет возможности установить RTCRtpMuxPolicy.

Решение: я обновил API sipml5 до 2.1.3 с 2.0.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.

Теперь все работает нормально.

person Sibin John Mattappallil    schedule 10.03.2017