Изменение ограничений SDP для WebRTC в FireFox

Я пытаюсь уменьшить битрейт в RTCPeerConnection в FireFox. Я успешно смог сделать это в Chrome.

Я изменяю строку SDP, которая автоматически генерируется FireFox после вызова метода createOffer. Мой обратный вызов изменяет SDP, а затем пытается установить SDP в сгенерированном RTCSessionDescription (что является просто DOMString в соответствии со спецификацией протокола). В Chrome я могу изменить эту строку SDP, а затем установить ее (сделано в обратном вызове, переданном createOffer:

desc.sdp = TransFormSDP(desc.sdp);
connection.setLocalDescription(desc);

Однако похоже, что это не работает в FireFox, он не будет обновлять SDP после моего назначения и продолжает использовать строку, сгенерированную методом createOffer.

В частности, я пытаюсь специально добавить ограничение fmtp: max-fr=15; max-fs=400; для предлагаемого кодека VP8 и пропускной способности, добавив строку b=AS:512 в часть видеоносителя SDP.

Разве FF не позволяет вам изменять SDP после того, как он был автоматически сгенерирован? Или FireFox запрещает определенные параметры SDP, которые являются частью стандартизации SDP (например, ограничения полосы пропускания и настройки кодека)?

РЕДАКТИРОВАТЬ: Серьезно FireFox??


person Benjamin Trent    schedule 09.04.2014    source источник


Ответы (2)


Что ж, похоже, пока что это не поддерживается, по крайней мере, я предполагаю так потому что еще не было ответа на эту ошибку. Думаю, я застрял в использовании Chrome на данный момент.

person Benjamin Trent    schedule 09.04.2014
comment
Если у кого-то есть лучший ответ, пожалуйста, дайте его. Я приму свою судьбу не использовать FF через два дня, когда смогу принять свой собственный ответ... :( - person Benjamin Trent; 10.04.2014
comment
Вы нашли решение? - person igorpavlov; 24.02.2015
comment
Насколько я знаю, это все еще ошибка, и Mozilla не исправила ее. - person Benjamin Trent; 24.02.2015
comment
Похоже, по состоянию на январь 2016 года это (пока) не поддерживается Firefox 48: ссылка - person Jokester; 10.08.2016
comment
Разработчики Firefox, похоже, вообще не заинтересованы в том, чтобы заставить webRTC работать в соответствии со спецификациями. Тем не менее, изменить пропускную способность в SDP невозможно. Аудио будет оставаться на скорости 40 кбит/с независимо от того, что вы делаете. Это действительно позор. - person Armin Hierstetter; 15.03.2017

На самом деле битрейт кодека доступен через API, однако он не очень хорошо работает в Firefox.

Правильный API должен быть описан в спецификациях https://www.w3.org/TR/webrtc/#dom-rtcrtpencodingparameters

RTCRtpSender.setParameters поддерживается в Firefox с 64 версии. Но на самом деле (v.66) не поддерживает его корректно, битрейт работает, а fps нет.

Фрагмент пути API для изменения битрейта:

const sender = peerConnection.getSenders().filter(s => s.track.kind === 'video')[0];
sender.setParameters({...(sender.getParameters()), encodings: [{
    maxBitrate: 1000*50,
}]});

Однако изменение битрейта через API имеет лишь временный эффект в FF, как показано на диаграмме ниже. Битрейт возвращается к значению по умолчанию через несколько секунд. Причина не ясна, возможно, это связано со свойством кодека degradationPreference, так как для balanced, maintain-framerate и maintain-resolution он действует по-разному. На хроме работает нормально.

введите здесь описание изображения

person Mariusz Beltowski    schedule 20.04.2019
comment
это не соответствует поведению на webrtc.github.io/samples/src /content/peerconnection/bandwidth -- если вы видите такое поведение, отправьте сообщение об ошибке в firefox. - person Philipp Hancke; 21.04.2019