WebRT C не показывает удаленное видео - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь сделать приложение WebRT C p2p с socket.io в соответствии с курсом O'Reilly WebRT C. Первое, что нужно сделать, это инициализировать одноранговое соединение с конфигурацией сервера STUN:

var configuration = {
    'iceServers': [{
        'urls': 'stun:stun.l.google.com:19302'
    }]
};
rtcPeerConn = new webkitRTCPeerConnection(configuration);

Следующая часть сигнализации запуска определяет несколько обработчиков, необходимых для установления соединения WebRT C. Когда это кандидат в лед, готовый к отправке равноправному узлу, запускается этот первый обработчик событий, и этот кандидат будет отправляться по каналу socket.io всем, кто на нем.

// send any ice candidates to the other peer
rtcPeerConn.onicecandidate = function (evt) {
if (evt.candidate)
io.emit('signal',{"user_type":"signaling", "command":"icecandidate", "user_data": JSON.stringify({ 'candidate': evt.candidate })});
console.log("completed sending an ice candidate...");
};

Следующий обработчик должен создать предложение, когда одноранговое соединение сообщает, что оно готово к переговорам

// let the 'negotiationneeded' event trigger offer generation
rtcPeerConn.onnegotiationneeded = function () {
console.log("on negotiation called");
rtcPeerConn.createOffer(sendLocalDesc, logError);
};

Полный код:

io.on('signal', function(data) {

    if (myUserType == "manager") {
    // here is checking user type customer/manager and show the elements for this user type
    }
    // ... //
    else if (data.user_type == 'signaling') {
        if (!rtcPeerConn) startSignaling();
        var message = JSON.parse(data.user_data);
        if (message.sdp) {
            rtcPeerConn.setRemoteDescription(new RTCSessionDescription(message.sdp), function () {
                // if we received an offer, we need to answer
                if (rtcPeerConn.remoteDescription.type == 'offer') {
                    rtcPeerConn.createAnswer(sendLocalDesc, logError);
                }
            }, logError);
        }
        else {
            rtcPeerConn.addIceCandidate(new RTCIceCandidate(message.candidate));
        }
    }
}); 

Создать RTCPeerConnection:

function startSignaling() {
    console.log("starting signaling...");
    rtcPeerConn = new webkitRTCPeerConnection(configuration);

    // send any ice candidates to the other peer
    rtcPeerConn.onicecandidate = function (evt) {
        if (evt.candidate)
            io.emit('signal',{"user_type":"signaling", "command":"icecandidate", "user_data": JSON.stringify({ 'candidate': evt.candidate })});
        console.log("completed sending an ice candidate...");
    };

    // let the 'negotiationneeded' event trigger offer generation
    rtcPeerConn.onnegotiationneeded = function () {
        console.log("on negotiation called");
        rtcPeerConn.createOffer(sendLocalDesc, logError);
    };

    // once remote stream arrives, show it in the main video element
    rtcPeerConn.onaddstream = function (evt) {
        console.log("going to add their stream...");
        mainVideoArea.srcObject = evt.stream;
    };

    // get a local stream, show it in our video tag and add it to be sent
    navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
    navigator.getUserMedia({
        'audio': false,
        'video': true
    }, function (stream) {
        console.log("going to display my stream...");
        smallVideoArea.srcObject = stream;
        rtcPeerConn.addStream(stream);
    }, logError);

}

function sendLocalDesc(desc) {
    rtcPeerConn.setLocalDescription(desc, function () {
        console.log("sending local description");
        io.emit('signal',{"user_type":"signaling", "command":"SDP", "user_data": JSON.stringify({ 'sdp': rtcPeerConn.localDescription })});
    }, logError);
}

Почему удаленное видео не отображается? Если кто-нибудь знает, как исправить код из этого курса, я был бы очень признателен

...