При запуске моего локального приложения webRTC в браузере Google Chrome не генерируются кандидаты ICE. - PullRequest
2 голосов
/ 08 апреля 2019

У меня есть базовое приложение webRTC, которое поддерживает видео / аудио связь и обмен файлами между двумя одноранговыми узлами. Приложение запускается, как и предполагалось, когда я открываю его в Mozilla Firefox, но когда я запускаю его в Google Chrome, onicecandidate возвращает ноль

Мой RTCPeerConnection

        myConnection = new RTCPeerConnection();

Настройка однорангового соединения

myConnection.createOffer().then(offer => {
    currentoffer = offer
    myConnection.setLocalDescription(offer);
})
    .then(function () {
        myConnection.onicecandidate = function (event) {
            console.log(event.candidate);

            if (event.candidate) {
                send({
                    type: "candidate",
                    candidate: event.candidate
                });
            }
        };
        send({
            type: "offer",
            offer: currentoffer
        });
    })
    .catch(function (reason) {
        alert("Problem with creating offer. " + reason);
    });

В Mozilla Firefox вы можете видеть в журнале консоли все кандидаты ICE, которые собираются по каждому событию "onicecandidate"

Firefox output

В Chrome вывод нулевой Chrome output

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

При создании однорангового соединения вы должны передавать серверы STUN / TURN.

В противном случае вы будете использовать только местных кандидатов и, следовательно, сможете подключаться только локально

var STUN = {
    'url': 'stun:stun.l.google.com:19302',
};

var iceServers = 
{
    iceServers: [STUN]
};

var pc = new RTCPeerConnection(iceServers);
0 голосов
/ 11 апреля 2019

Вы должны передать объект параметров при вызове метода createOffer(), например:

myConnection = new RTCPeerConnection();

var mediaConstraints = {
    'offerToReceiveAudio': true,
    'offerToReceiveVideo': true    
};

myConnection.createOffer(mediaConstraints).then(offer => {
        currentoffer = offer
        myConnection.setLocalDescription(offer);
    })
    ...// the rest of you code goes here    

Кроме того, вы можете указать RTCRtpTransceiver перед созданием предложения:

myConnection = new RTCPeerConnection();

myConnection.addTransceiver("audio");
myConnection.addTransceiver("video");

myConnection.createOffer().then(offer => {
        currentoffer = offer
        myConnection.setLocalDescription(offer);
    })
    ...// the rest of you code goes here 

Источники:
WebRTC 1.0
MDN RTCPeerConnection.createOffer ()
MDN RTCPeerConnection.addTransceiver ()
Пример - GitHub

...