Какие ограничения и параметры WebRTC я должен пройти, чтобы получить интероперабельность между Firefox и Google Chrome
Я создаю приложение чата для локальной сети. Я использую WebRTC, но не могу заставить Firefox и Google Chrome взаимодействовать.
Я не знаю точных параметров, которые я должен передать RTCPeerConnection createOffer/createAnswer.
Я сделал тесты ниже с Firefox 31 и Google Chrome 36 на том же компьютере Fedora Linux 20
RTCPeerConnection создается как: pc = new RTCPeerConnection(null, RTC_PC_OPTIONS);
ответы/предложения создаются как: pc.createOffer(onsuccess, onfail, CONSTRAINTS);
Мой вопрос: какие параметры (RTC_PC_OPTIONS
и CONSTRAINTS
) следует передать, чтобы получить интероперабельность между двумя браузерами?
Тест 1
RTC_PC_OPTIONS = undefined
CONSTRAINTS = undefined
FFx2FFx FFx2Chrome Chrome2FFx Chrome2Chrome
------- ---------- ---------- -------------
dataChannel setup ok ok ok ok
dataChannel send/recv ok ok ok ok
Video stream ok ok err [1] ok
Тест 2
MDN recomands this value for RTC_PC_OPTIONS
RTC_PC_OPTIONS = {
optional: [
{DtlsSrtpKeyAgreement: true},
{RtpDataChannels: true}
]
};
CONSTRAINTS = undefined
FFx2FFx FFx2Chrome Chrome2FFx Chrome2Chrome
------- ---------- ---------- -------------
dataChannel setup ok err [2] err [3] ok
dataChannel send/recv ok - - ok
Video stream ok - - err [4]
^~~~~~~~~~~~~~~~^
^
i used datachannel to do signaling for the video TRCPeerConnection,
that is why these were not tested
Тест 3
RTC_PC_OPTIONS = undefined
CONSTRAINTS = { 'mandatory': { 'OfferToReceiveAudio': true, 'OfferToReceiveVideo': true } }
FFx2FFx FFx2Chrome Chrome2FFx Chrome2Chrome
------- ---------- ---------- -------------
dataChannel setup ok ok ok err [5]
dataChannel send/recv ok ok ok -
Video stream err [6] ok err [6] -
- Chrome создает предложение и отправляет его в FFx, FFx получает предложение, создает ответ и отправляет его на хром,
chrome получает ответ. Но onaddstream не запускается в firefox
- После того, как хром получит предложение, отправленное FFx, он регистрирует ошибку на консоли:
Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set data send codecs..
- Chrome отправляет предложение, FFx отправляет ответ,
chrome получает эту ошибку: Failed to parse SessionDescription. m=application 35224 RTP/SAVPF Expects at least 4 fields.
FFx получает эту ошибку: ICE failed, see about:webrtc for more details
В about:webrtc
:
Local candidate Remote candidate ICE State Priority Nominated Selected
a.b.c.d:35224/udp(host) a.b.c.d:45895/udp(host) frozen 9115005270282354000
- Chrome_1 получает сообщение об ошибке:
Uncaught NetworkError: Failed to execute 'send' on 'RTCDataChannel': Could not send data
chrome_2 получает ошибку:
Uncaught SyntaxError: Failed to execute 'addIceCandidate' on 'RTCPeerConnection': The ICE candidate could not be added.
- Вызывающий абонент отправляет предложение, вызывающий получает сообщение об ошибке:
Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set data send codecs.
- Как [1] все нормально, но onaddstream не запускается
Ответы
Ответ 1
Итак, несколько вещей:
- Независимо от того, какая страница MDN предлагает RTPDataChannels очень устарела (дайте мне знать URL-адрес). Оба Firefox и Chrome теперь поддерживают спецификацию DataChannels. То же самое для DTLSSRTPKeyAgreement Я считаю,
- Убедитесь, что вы вызываете createDataChannel() перед createOffer()
- Это видео или видео + аудио? Недавно мы исправили ошибку с потоками только для видео, если не помню, чтобы не запускать onAddStream. Это объясняет 1 и [6], я думаю. См. ошибка 1035067, которая высадилась в Nightly и Aurora (FF33); Я попросил подняться на Beta/32
- Проблема "ожидает 4 поля", если я помню, была ошибка в Firefox - какие версии вы используете? У нас была ошибка, зафиксированная в 30 (?), Где у нас было ненужное пространство на конце, из-за чего хром отклонил его - они исправлены, чтобы избежать этого, и мы исправили его.
Попробуйте использовать FF Beta и Nightly (http://nightly.mozilla.org/). И когда вы сообщаете подобные вещи, укажите, какие версии браузера вы используете!: -)