Какие ограничения и опции 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]         -

  1. Chrome создает предложение и отправляет его в FFx, FFx получает предложение, создает ответ и отправляет его в chrome,

chrome получает ответ. Но onaddstream не triggred в в Firefox


  1. после того, как chrome получает предложение, отправленное FFx, он регистрирует ошибку в консоли:

Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set data send codecs..


  1. 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


  1. 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.


  1. абонент отправляет оферту, абонент получает сообщение об ошибке:

Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set data send codecs.


  1. как [1] все в порядке, но onaddstream не запускается

1 ответов


Итак, несколько вещей:

  1. любая страница MDN предлагает RTPDataChannels очень устарела (дайте мне знать URL). Как Firefox, так и Chrome теперь поддерживают спецификации DataChannels. Же для DTLSSRTPKeyAgreement я верю
  2. убедитесь, что вы вызываете createDataChannel () перед createOffer ()
  3. это только видео или видео+аудио? Недавно мы исправили ошибку с потоками только видео, если я помню, что не запускал onAddStream. Это объяснило бы 1 и [6] I думать. См.ошибка 1035067, который приземлился в Nightly и Aurora (FF33); я попросил поднять до Beta/32
  4. проблема "ожидает 4 поля", если я помню, была ошибка в Firefox-какие версии вы используете? У нас была исправлена ошибка в 30(?) где у нас было ненужное пространство на конце, которое заставило chrome отклонить его - они исправили, чтобы избежать этого, и мы исправили его.

попробуйте это с FF Beta и Nightly (http://nightly.mozilla.org/). И когда вы сообщаете о таких вещах, пожалуйста, укажите, какие версии браузера вы используете! :-)