RTCDataChannel застревает в состоянии «подключения» в Firefox - PullRequest
0 голосов
/ 15 апреля 2019

Когда я подключаюсь с помощью Kurento в Firefox, readyState канала данных не изменяется. Одноранговое соединение работает, так как я могу отправлять и получать видео и аудио. В хроме все отлично работает. Я не знаю, связана ли проблема с Куренто.

Вот как я создаю оба канала данных (получение и отправка)


function onExistingParticipants(msg) {
   peerConn = new RTCPeerConnection(pc_config);
    dataChannel = peerConn.createDataChannel('send', {reliable: false});

    dataChannel.binaryType = 'arraybuffer';
    dataChannel.onerror = function (error) {
        console.log(error);
    };

    dataChannel.onmessage = function (event) {
        console.log('MESSAGE' ,event);
    };

    dataChannel.onclose = function () {
        console.log('close');
    };
    dataChannel.onopen = function (event) {
        console.log('OPEN',event);
    };

    window.localConnection = peerConn;
    var participant = new Participant(msg.user);
    participants[msg.user] = participant;

     var constraints = {
                audio : true,
                video : {
                    mandatory : {
                        maxWidth : 320,
                        maxFrameRate : 15,
                        minFrameRate : 15
                    }
                }
      };

    var video  = participant.getVideoElement();

    var options = {
        peerConnection : peerConn ,
        localVideo: video,
        mediaConstraints: constraints,
        onicecandidate: participant.onIceCandidate.bind(participant)
    }


    participant.rtcPeer = new kurentoUtils.WebRtcPeer.WebRtcPeerSendrecv(options,
        function (error) {
            if(error) {
                return console.error(error);
            }
            this.generateOffer(participant.offerToReceiveVideo.bind(participant));

        });


    msg.data.forEach(receiveVideo);
}

function receiveVideo(sender) {
remotechannel = remotepeer.createDataChannel('receive');
    remotechannel.onerror = function (error) {
        console.log(error)
    };

    remotechannel.onmessage = messages;

    remotechannel.onclose = function () {
        console.log('close');
    };
    remotechannel.onopen = function (event) {
        console.log('OPEN',event);
    };
    remotechannel.binaryType = 'arraybuffer';

    participants[sender] = participant;
    var video = participant.getVideoElement();

    var options = {
        peerConnection : remotepeer ,
        remoteVideo: video,
        onicecandidate: participant.onIceCandidate.bind(participant)

    }

    participant.rtcPeer = new kurentoUtils.WebRtcPeer.WebRtcPeerSendrecv(options, 
        function (error) {
            if(error) {
                return console.error(error);
            }
            this.generateOffer(participant.offerToReceiveVideo.bind(participant));
        }
    );
}

На стороне сервера для комнаты присоединения и получения конечной точки для пользователя

  room.pipeline.create('WebRtcEndpoint', {useDataChannels: true}, (error, webRtc) => {
....
}

...