2016-09-07 3 views
1

Ich implementiere webrtc für peerconnection, funktioniert aber nicht. Wenn ich diesen Code debugge, sah ich, dass es nicht kommtwebrtc configration gibt Nullwert zurück

theirConnection.onaddstream = function (e) { 
     theirVideo.src = window.URL.createObjectURL(e.stream); 
    }; 

Block. Bitte lassen Sie mich wissen, wo ich falsch gemacht habe? Ich verwende dies auf meinem lokalen System und nur mit einer Webcam.

function startPeerConnection(stream) { 

    var configuration = { 
     "iceServers": [{ "url": "stun:127.0.0.1:8080" }] 
    }; 

    yourConnection = new mozRTCPeerConnection(configuration); 
    theirConnection = new mozRTCPeerConnection(configuration); 
    // Setup stream listening 

    theirConnection.onaddstream = function (e) { 
     theirVideo.src = window.URL.createObjectURL(e.stream); 
    }; 


    // Setup ice handling 
    yourConnection.onicecandidate = function (event) { 
     if (event.candidate) { 
      theirConnection.addIceCandidate(new RTCIceCandidate(event.candidate)); 
     } 

    }; 

    theirConnection.onicecandidate = function (event) { 
     if (event.candidate) { 
      yourConnection.addIceCandidate(new RTCIceCandidate(event.candidate)); 
     } 
    }; 

    // Begin the offer 
    yourConnection.createOffer(function (offer) { 
     yourConnection.setLocalDescription(offer); 
     theirConnection.setRemoteDescription(offer); 

     theirConnection.createAnswer(function (offer) { 
      theirConnection.setLocalDescription(offer); 
      yourConnection.setRemoteDescription(offer); 
     }); 
    }); 
} 

Antwort

0

Sie rufen die Verheißungsmethoden auf. Das Problem ist buchstäblich, dass Sie nicht nach Fehlern suchen.

Im Einzelnen: Die legacy callback methods Sie suchen erwarten, dass mindestens zwei Argumente: ein Erfolg Rückruf, und ein Fehler Rückruf.

Ohne einen Fehlerrückruf ruft WebIDL name-overloading stattdessen die newer promise methods auf, die keine Rückrufe entgegennimmt und stattdessen eine Zusage zurückgibt.

Entweder überall in den erforderlichen Fehler Rückrufe passieren, z.B .:

yourConnection.createOffer(offer => { ... }, err => console.log(err)); 

Oder besser, die aus der Legacy-Methoden vermeiden:

function startPeerConnection(stream) { 
 

 
    var config = { iceServers: [{ urls: "stun:127.0.0.1:8080" }] }; 
 

 
    yours = new RTCPeerConnection(config); 
 
    theirs = new RTCPeerConnection(config); 
 

 
    theirs.onaddstream = e => theirVideo.srcObject = e.stream; 
 
    yours.onicecandidate = e => theirs.addIceCandidate(e.candidate); 
 
    theirs.onicecandidate = e => yours.addIceCandidate(e.candidate); 
 

 
    yours.addStream(stream); // <-- don't forget 
 

 
    return yours.createOffer() 
 
    .then(offer => Promise.all([yours.setLocalDescription(offer), 
 
           theirs.setRemoteDescription(offer)])) 
 
    .then(() => theirs.createAnswer()) 
 
    .then(answer => Promise.all([theirs.setLocalDescription(answer), 
 
           yours.setRemoteDescription(answer)])); 
 
} 
 
      
 
navigator.mediaDevices.getUserMedia({video: true, audio: true}) 
 
    .then(stream => startPeerConnection(stream)) 
 
    .catch(e => console.log(e));
<video id="theirVideo" height="120" width="160" autoplay></video> 
 
<script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>

Und immer auf Fehler überprüfen. Ein createOffer Fehler sagte mir, Sie hätten .addStream(stream) vergessen.

Die Promise-API ist nativ in Firefox und über adapter.js in Chrome verfügbar.

Verwandte Themen