2016-05-19 1 views
0

Я создал чат-систему, которая позволяет вам подключаться к людям в видеочате.Как подключить двух конкретных клиентов по ID с помощью websockets

Проблема в том, что мне нужно подключить двух клиентов через webRTC на основе идентификатора или что-то, что позволяет мне различать клиентов.

В настоящий момент соединение является случайным. Мой код просто ищет существующего кандидата и подключается к ним.

Я попытался установить идентификатор для клиентов таким образом ...

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"); 
}); 

Где CLIENTS будет следить за каждым individul клиента.

Но все же это не решает мою проблему. Это мой код client.js ...

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)); 
} 
} 

Как назначить клиентам идентификатор и подключить их на основе их идентификаторов. Например, если у меня есть client1 и вы хотите подключить его к client2, чтобы эти два пользователя могли обмениваться видео друг с другом, как я могу это сделать?

webRTC невероятно трудный, как новичок, любые рекомендации полезны.

ответ

1

то, что я предлагаю, не может быть лучшим решением, но простой способ сделать это может быть:

  • client1 видит список доступных пэров (client2 является одним из них), client1 выбирает client2 и щелкает кнопкой вызова,
  • Теперь на сервере, вы можете сгенерировать случайный маркер для вызова, использовать его в качестве WebSocket roomname и, вероятно, назвать идентификатор
  • добавить соединение client1 в этой WebSocket комнате, направить запрос вызова на cLIENT2
  • если клиент2 принимает вызов, добавьте client2's connec в комнату
  • ваш сервер может прослушивать комнату для подключения к сверстнику и запросить трансляцию этого сообщения всем ровесникам, уже входящим в эту комнату
  • теперь сверстники уже в комнате (client1) могут инициировать вызов WebRTC новому партнеру (клиент2)
Смежные вопросы