Как мы узнаем, когда webRTC уже закончил сбор кандидатов ICE

Я использую Kurento Utils для соединения WebRTC с Kurento Media Server (версия 5.x)

Внутри библиотеки kurento-utils-js во время инициализации коды упрощения показаны ниже:

if (!this.pc) {
    this.pc = new RTCPeerConnection(server, options);
}

var ended = false;
pc.onicecandidate = function(e) {
    // candidate exists in e.candidate
    if (e.candidate) {
        ended = false;
        return;
    }

    if (ended) {
        return;
    }

    var offerSdp = pc.localDescription.sdp;
    console.log('ICE negotiation completed');

    self.onsdpoffer(offerSdp, self);

    ended = true;
};

У меня вопрос: похоже, он ждет, пока onicecandidate передаст "нулевое" значение, которое означает, что процесс завершен и, таким образом, можно продолжить создание предложения SDP, но я не смог найти такое поведение в спецификациях WebRTC?

Мой следующий вопрос: как еще мы можем узнать, что процесс поиска ледяных кандидатов закончился?

Один из моих компьютеров в моем офисе не смог получить код console.log('ICE negotiation completed');, поскольку не было передано нулевое значение.


person forestclown    schedule 03.08.2015    source источник
comment
На каком этапе настройки не завершились? Мы пользуемся этой библиотекой больше года и раньше не видели. В любом случае KMS6 использует Trickle ICE, поэтому, возможно, лучше обновить, чем пытаться исправить это.   -  person igracia    schedule 03.08.2015


Ответы (2)


http://www.w3.org/TR/webrtc/

4.3.1

"Если намерение ICE Agent состоит в том, чтобы уведомить сценарий, что:

[...]

  • Процесс сбора завершен.

Установите для соединения состояние сбора льда как завершено и оставьте значение newCandidate равным нулю ".

Таким образом, вы можете либо проверить состояние сбора льда на «завершено» (в реальной жизни это не очень надежно), либо дождаться нулевого кандидата (супер надежный).

person Dr. Alex Gouaillard    schedule 04.08.2015
comment
Эта библиотека ожидает нулевого кандидата, поэтому странно, что она не получает этого кандидата ... - person igracia; 20.08.2015

Вы можете проверить свойство iceGatheringState (запустить в Chrome):

var config = {'iceServers': [{ url: 'stun:stun.l.google.com:19302' }] };
var pc = new webkitRTCPeerConnection(config);
pc.onicecandidate = function(event) { 
    if (event && event.target && event.target.iceGatheringState === 'complete') {
        alert('done gathering candidates - got iceGatheringState complete');
    } else if (event && event.candidate == null) {
        alert('done gathering candidates - got null candidate');
    } else {
          console.log(event.target.iceGatheringState, event);   
    }
};

pc.createOffer(function(offer) {
    pc.setLocalDescription(offer);
}, function(err) {
    console.log(err);
}, {'mandatory': {'OfferToReceiveAudio': true}});

window.pc = pc;

person xdumaine    schedule 03.08.2015
comment
Я думаю, что в FF это не очень надежно, по крайней мере, несколько версий назад. - person igracia; 20.08.2015