2016-04-17 12 views
0

Der Fehler, den ich in der Browser-Konsole erhalte (erscheint nur in Chrome, keine Fehler in Firefox) ist Fehler: Ausführen von 'addIceCandidate' auf 'RTCPeerConnection' fehlgeschlagen : Der ICE-Kandidat konnte nicht hinzugefügt werden.WebRTC - 'RTCPeerConnection': Der ICE-Kandidat konnte nicht hinzugefügt werden

Ich folgte einem Tutorial und war in der Lage, P2P-Video-Chat mit nodejs zu arbeiten. Jetzt verwende ich Flask und Python auf der Serverseite und angularjs auf der Clientseite.

Der Signalprozess für zwei Peers wird mit angular-socketio durchgeführt.

console.log("The user connected to the socket"); 
socket.emit('readyToJoinRoom', {"signal_room": SIGNAL_ROOM}); 

//Send a first signaling message to anyone listening 
//This normally would be on a button click 

socket.emit('signal',{"type":"user_joined", "message":"Are you ready for a call?", "room":SIGNAL_ROOM}); 

socket.forward('signaling_message', $scope); 
$scope.$on('socket:signaling_message', function (ev, data) { 
    displaySignalMessage("Signal received: " + data.type); 
    // Setup the RTC Peer Connection object 
    if (!rtcPeerConn) { 
      startSignaling(); 
    } 

    if(data.type != "user_joined") { 
     console.log(data.message); 
     var message = JSON.parse(data.message); 
     console.log(message); 
     if(message.sdp) { 
      console.log("inside 2nd if statement"); 
      rtcPeerConn.setRemoteDescription(new RTCSessionDescription(message.sdp), function() { 

      // if we received an offer, we need to answer 
      if(rtcPeerConn.remoteDescription.type === 'offer') { 
        console.log("inside third if for remoteDescription."); // This never executes, error happens right before this line 
        rtcPeerConn.createAnswer(sendLocalDesc, logError); 
      } 
      }, logError); 
    } 
    else { 
    console.log("addedddddddd ice candidate."); 
    rtcPeerConn.addIceCandidate(new RTCIceCandidate(message.candidate)); 
    }  
} 
}); 

Sobald zwei Personen dem Raum beitreten, wird die Methode startSignaling() aufgerufen Er stellt die lokale Beschreibung ein und vervollständigt 3 Eiskandidaten, dann erhalte ich einen SDP, aber das ist nie wahr if (rtcPeerConn.remoteDescription.type === 'offer'), obwohl es den SDP in der Konsole mit einem Typ gleich druckt Angebot. Ich bin nicht sicher, warum es nie in diese if-Aussage geht. Ich bin mir nicht sicher, warum ich einen Fehler bekomme. Wenn Sie Fragen haben, fragen Sie einfach. Danke für die Hilfe.

Antwort

1

Ich denke

rtcPeerConn.setRemoteDescription(new RTCSessionDescription(message.sdp),... 

wird nicht funktionieren, da der Konstruktor von RTCSessionDescription die Informationen über die Art und die SDP benötigt. Versuchen:

var desc = new RTCSessionDescription(); 
desc.sdp = message.sdp; 
desc.type = "offer"; 
rtcPeerConn.setRemoteDescription(desc,..... 

ich hatte einige Probleme als auch die RTCSessionDescription von JSON zu konstruieren. Hoffe, das hilft ...

+0

Ich habe das versucht und es hat nicht funktioniert = [. Immer noch der gleiche Fehler. – sebenalern

Verwandte Themen