Ich habe zwei Kunden:fehlgeschlagen lokale Antwort sdp einzustellen: Called in falschem Zustand: STATE_INPROGRESS
1) Chrome (Version 50.0.2661.102 m) auf Windows 7 PC
2) Chrome (Version 50.0.2661.89) auf Android-Tablet
Beide sind im selben Netzwerk (also keine Notwendigkeit für STUN/TURN-Server).
ich meinen eigenen Signal-Server mit node.js (WebSocket) auf einer VirtualBox VM mit Centos 6.en
Die Kommunikation mit Video/Ton zwischen den Clients aufgebaut verwenden funktioniert gut. Jetzt möchte ich eine Datei von einem Client zu einem anderen übertragen. Als Basis meines Codes verwende ich den Code dieses Beispiels here
Wie dieser Code vorschlagen, ich den DataChannel genau nach der Erstellung von PeerConnection erstellen.
function createPeerConnection() {
....
myPeerConnection = new RTCPeerConnection(iceServers, optional);
myDataChannel = myPeerConnection.createDataChannel('myDataChannel');
// Set up event handlers for the ICE negotiation process.
myPeerConnection.onicecandidate = handleICECandidateEvent;
myPeerConnection.onaddstream = handleAddStreamEvent;
myPeerConnection.onnremovestream = handleRemoveStreamEvent;
myPeerConnection.oniceconnectionstatechange = handleICEConnectionStateChangeEvent;
myPeerConnection.onicegatheringstatechange = handleICEGatheringStateChangeEvent;
myPeerConnection.onsignalingstatechange = handleSignalingStateChangeEvent;
myPeerConnection.onnegotiationneeded = handleNegotiationNeededEvent;
myPeerConnection.ondatachannel = handleDataChannel;
myDataChannel.onmessage = handleDataChannelMessage;
myDataChannel.onopen = handleDataChannelOpen;
}
...
...
function invite(peerId) {
...
createPeerConnection();
...
}
...
...
function handleVideoOfferMsg(msg) {
thereIsNegotiation = true;
targetUsername = msg.name;
// Call createPeerConnection() to create the RTCPeerConnection.
log("Starting to accept invitation from " + targetUsername);
createPeerConnection();
// We need to set the remote description to the received SDP offer
// so that our local WebRTC layer knows how to talk to the caller.
var desc = new RTCSessionDescription(msg.sdp);
myPeerConnection.setRemoteDescription(desc)
.then(function(stream) {
log("-- Calling myPeerConnection.addStream()");
return myPeerConnection.addStream(localStream);
})
.then(function() {
log("------> Creating answer");
// Now that we've successfully set the remote description, we need to
// start our stream up locally then create an SDP answer. This SDP
// data describes the local end of our call, including the codec
// information, options agreed upon, and so forth.
return myPeerConnection.createAnswer();
})
.then(function(answer) {
log("------> Setting local description after creating answer");
// We now have our answer, so establish that as the local description.
// This actually configures our end of the call to match the settings
// specified in the SDP.
return myPeerConnection.setLocalDescription(answer);
})
.then(function() {
var msg = {
name: clientId,
room: roomId,
target: targetUsername,
type: "video-answer",
sdp: myPeerConnection.localDescription
};
// We've configured our end of the call now. Time to send our
// answer back to the caller so they know that we want to talk
// and how to talk to us.
log("Sending answer packet back to other peer");
sendToServer(msg);
})
.catch(handleGetUserMediaError);
}
Wenn der zweite Kunde das Angebot macht, der erste Kunde, wenn versucht, die Antwort zu machen, erhalte ich die Fehler
Fehler der Kamera zu öffnen und/oder Mikrofon: failed lokale Antwort spd zu setzen: Transportbeschreibung fehlgeschlagen: Lokaler Fingerabdruck aber keine Identität verfügbar.
oder
Fehler der Kamera zu öffnen und/oder Mikrofon: failed lokale Antwort spd einzustellen: Called in falschem Zustand: STATE_INPROGRESS
Nur einmal die Schaffung erfolgreich war.
Muss ich DataChannel an anderer Stelle erstellen? Wie hier:
function handleICEConnectionStateChangeEvent {
switch(myPeerConnection.iceConnectionState) {
...
case "connected":
createDataChannel();
break;
}
}
function createDataChannel(){
myDataChannel = myPeerConnection.createDataChannel('myDataChannel');
myPeerConnection.ondatachannel = handleDataChannel;
myDataChannel.onmessage = handleDataChannelMessage;
myDataChannel.onopen = handleDataChannelOpen;
}
Irgendwelche Vorschläge?
Vergessen Sie nicht, die Selbst akzeptieren Häkchen auf diese zu klicken! – halfer