2016-05-19 13 views
0

Ich stellte ein Chat-System her, das dir erlaubt, Leute zu verbinden, um Videochat zu verbinden.Wie man zwei spezifische Klienten durch Identifikation unter Verwendung websockets verbindet

Das Problem ist, ich muss zwei Clients über WebRTC basierend auf einer ID oder etwas verbinden, die mir erlaubt, zwischen Clients zu unterscheiden.

Im Moment ist die Verbindung zufällig. Mein Code sucht einfach nach einem vorhandenen Kandidaten und stellt eine Verbindung zu ihnen her.

Ich habe versucht, eine ID-Kunden auf diese Weise einstellen ...

var WebSocketServer = require('ws').Server, 
wss = new WebSocketServer({port: 8080}), 
CLIENTS=[]; 

wss.on('connection', function(ws) { 
CLIENTS.push(ws); 
ws.on('message', function(message) { 
    console.log('received: %s', message); 
    sendAll(message); 
}); 
ws.send("NEW USER JOINED"); 
}); 

Wo CLIENTS Spur jeder individul Client halten.

Aber immer noch löst das mein Problem nicht. Dies ist mein client.js code ...

window.onload = function(){  


navigator.getUserMedia = navigator.getUserMedia || navigator.mozGetUserMedia || navigator.webkitGetUserMedia; 
window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; 
window.RTCIceCandidate = window.RTCIceCandidate || window.mozRTCIceCandidate || window.webkitRTCIceCandidate; 
window.RTCSessionDescription = window.RTCSessionDescription || window.mozRTCSessionDescription || window.webkitRTCSessionDescription; 
window.RTCPeerConnectionErrorCallback = window.RTCPeerConnectionErrorCallback || window.mozRTCPeerConnectionErrorCallback || window.webkitRTCPeerConnectionErrorCallback; 



serverConnection = new WebSocket('ws://127.0.0.1:3434'); 
serverConnection.onmessage = gotMessageFromServer; 


serverConnection.onmessage = gotMessageFromServer; 

var constraints = { 
    video: true, 
    audio: false, 
}; 

if(navigator.getUserMedia) { 
    navigator.getUserMedia(constraints, getUserMediaSuccess, getUserMediaError); 
} else { 
    alert('Your browser does not support getUserMedia API'); 
} 



} 

function getUserMediaSuccess(stream) { 
    localStream = stream; 
    video.src = window.URL.createObjectURL(stream); 
} 

function getUserMediaError(error) { 
    console.log(error); 
} 


function errorHandler(error) { 
    console.log(error); 
} 


function start(isCaller) { 

peerConnection = new RTCPeerConnection(peerConnectionConfig); 
peerConnection.onicecandidate = gotIceCandidate; 
peerConnection.onaddstream = gotRemoteStream; 
peerConnection.addStream(localStream); 

if(isCaller) { 
    peerConnection.createOffer(gotDescription, createOfferError); 
} 
} 

function gotDescription(description) { 
    console.log('got description'); 
    peerConnection.setLocalDescription(description, function() { 
     serverConnection.send(JSON.stringify({'sdp': description})); 
    }, function() {console.log('set description error')}); 
} 

function gotIceCandidate(event) { 
    if(event.candidate != null) { 
     serverConnection.send(JSON.stringify({'ice': event.candidate})); 
    } 
} 


function gotRemoteStream(event) { 
    console.log("got remote stream"); 
    remote.src = window.URL.createObjectURL(event.stream); 
} 

function createOfferError(error) { 
    console.log(error); 
} 
function gotMessageFromServer(message) { 
    if(!peerConnection) start(false); 


    var signal = JSON.parse(message.data); 
    if(signal.sdp) { 
     peerConnection.setRemoteDescription(new RTCSessionDescription(signal.sdp), function() { 
     peerConnection.createAnswer(gotDescription, errorHandler); 
    }, errorHandler); 
} else if(signal.ice) { 
    peerConnection.addIceCandidate(new RTCIceCandidate(signal.ice)); 
} 
} 

Wie kann ich Clients eine ID zuweisen und sie anhand ihrer IDs verbinden? Zum Beispiel, wenn ich client1 habe und ihn mit client2 verbinden möchte, damit diese zwei Videos miteinander teilen können, wie kann ich das tun?

webRTC ist unglaublich schwierig als Anfänger, jede Anleitung ist hilfreich.

Antwort

1

was ich vorschlage, ist vielleicht nicht die beste Lösung sein, aber eine einfache Möglichkeit, es zu tun sein kann:

  • client1 eine Liste der verfügbaren Peers sieht (client2 ist einer von ihnen), client1 wählt client2 und Klicks Ruftaste,
  • jetzt auf dem Server, können Sie ein zufälliges Token für den Anruf generieren, ist es als websocket Raumname verwenden und wahrscheinlich ID
  • hinzufügen client1 die Verbindung zu diesem websocket Raum nennen, die Anrufanforderung weiterleiten an client2
  • Wenn client2 den Anruf annimmt, fügen Sie connec von client2 hinzu tion in den Raum
  • dem Server kann diese Nachricht an alle Peers Peer hören Raum betreten und fragen Sendung bereits Teil dieses Raumes
  • jetzt die Peers bereits im Zimmer (client1) einen WebRTC Aufruf an die neue Peer initiieren können (client2)