2016-04-04 5 views
3

Im Anschluss an mein Code den eingehenden Anruf zu beantworten:RTCPeerConnection.createAnswer Rückruf gibt undefined zurück Objekt in mozilla für WebRTC Chat

var pc = connection.pc; 
pc.setRemoteDescription(sdp,function() { 
pc.createAnswer(function(answer) { 
    pc.setLocalDescription(answer,function() { 
    // code for sending the answer 
}) 
}) 
}) 

Der obige Code funktioniert für Chrom in Ordnung, aber wenn ich laufe das gleiche in mozilla, die answer erhalten von pc.createAnswer Rückruf ist undefined. Als Folge davon es mir folgende Fehler gibt:

TypeError: Argument 1 of RTCPeerConnection.setLocalDescription is not an object.

Antwort

1

Das Problem ist, dass Sie nicht Fehler überprüft, und zwar: nicht in den erforderlichen Fehler Rückrufe vorbei.

setRemoteDescription und setRemoteDescription erfordern entweder three arguments (Legacy-Callback-Stil) oder one (Versprechen), aber Sie sind in zwei vorbei. Das Gleiche gilt für createAnswer minus eins.

Die JS-Bindungen des Browsers lösen die falsche Überladung aus und geben Ihnen ein Versprechen zurück, das Sie ebenfalls nicht überprüfen, um Fehler effektiv zu verschlucken.

fügen Sie entweder die notwendigen Fehler Rückrufe:

var pc = connection.pc; 
pc.setRemoteDescription(sdp, function() { 
    pc.createAnswer(function(answer) { 
    pc.setLocalDescription(answer, function() { 
     // code for sending the answer 
    }, function(e) { 
     console.error(e); 
    }); 
    }, function(e) { 
    console.error(e); 
    }); 
}, function(e) { 
    console.error(e); 
}); 

Oder nutzen Sie die moderne Versprechen API:

var pc = connection.pc; 
pc.setRemoteDescription(sdp) 
    .then(() => pc.createAnswer()) 
    .then(answer => pc.setLocalDescription(answer)) 
    .then(() => { 
    // code for sending the answer 
    }) 
    .catch(e => console.error(e)); 

Das Versprechen API nativ in Firefox verfügbar ist, oder durch adapter.js in Chrome. Siehe fiddle.

Und immer auf Fehler prüfen. ;)

+0

Ich habe MDN aktualisiert. – jib

Verwandte Themen