javascript - WebRTC video chat -
i trying build 1-to-1 video chat webrtc , rtcpeerconnection api. problem code after initial user connects server, doesn't receive messages server when other users emit messages via socket.io. clients receive own emitted messages. here of code. full project on github at: https://github.com/rashadrussell/webrtc_experiment
client-side
var isinitiator = false; socket.on('initiatorfound', function(data) { isinitiator = data.setinitiator; console.log("is initiator? " + isinitiator); }); navigator.getmedia = ( navigator.getusermedia || navigator.webkitgetusermedia || navigator.mozgetusermedia || navigator.msgetusermedia ); navigator.getmedia( {video: true, audio: false}, function(stream) { var video = document.getelementbyid("localview"); video.src = window.url.createobjecturl(stream); console.log("add stream"); sendmessage('streamadd', {streamadded: 'stream-added'}); createpeerconnection(); pc.addstream(stream); if(isinitiator) { callpeer(); } }, function(err) { console.log("the following error occured: "); console.dir(err); } ); function sendmessage(type, message) { console.log("sending message"); socket.emit('message',{ "type": type, "message": message }); } function createpeerconnection() { pc = new rtcpeerconnection(servers, options); console.dir(pc); pc.onicecandidate = function(evt) { if(evt.candidate == null) return; pc.onicecandidate = null; console.log("send ice candidate"); sendmessage("icecandidate", json.stringify(evt.candidate)); }; pc.onaddstream = function(evt) { document.body.append("<video id='remotevideo' autoplay></video>"); var remotevid = document.getelementbyid("remotevideo"); remotevid.src = window.url.createobjecturl(evt.stream); }; } function callpeer() { pc.createoffer(function (offer) { pc.setlocaldescription(offer, function() { sendmessage("offer", json.stringify(offer)); }); console.log("send offer"); }, function(err) { console.log("offer error: " + err) }, videoconstraints ); } function answerpeer() { pc.createanswer(function(answer) { pc.setlocaldescription(answer); sendmessage("answer", json.stringify(answer)) }, function(err) { console.log("sending answer error: " + err) }, videoconstraints ); } socket.on('message', function(message) { console.log("console message:"); console.dir(message); if(message.type == 'streamadd') { console.log('stream added'); createpeerconnection(); if(isinitiator) { callpeer(); } } else if(message.type == 'offer') { pc.setremotedescription( new rtcsessiondescription(json.parse(message.message))); if(!isinitiator) { console.log("sending answer"); answerpeer(); } } else if(message.type == 'answer') { pc.setremotedescription( new rtcsessiondescription(json.parse(message.message))); } else if(message.type == 'icecandidate') { console.log("get ice candidate"); pc.addicecandidate(new rtcicecandidate(json.parse(message.message)) ); } }); server-side
var isinitiator = false; io.sockets.on('connection', function(socket) { if (!isinitiator) { isinitiator = true; socket.emit('initiatorfound', {setinitiator: isinitiator}); } else { socket.emit('initiatorfound', {setinitiator: !isinitiator}); } // signaling channel socket.on('message', function(message) { if (message.type == 'streamadd') { console.log('got message: ' + message); } //socket.emit('message' ,message); // should be: socket.broadcast.emit('message', message); }); });
see if want send message particular user set unique id(socket.id) try testing correct change server side code
var isinitiator = false;
io.sockets.on('connection', function(socket) { if (!isinitiator) { isinitiator = true; socket.emit('initiatorfound', {setinitiator: isinitiator}); } else { socket.emit('initiatorfound', {setinitiator: !isinitiator}); } // signaling channel socket.on('message', function(message) { if (message.type == 'streamadd') { console.log('got message: ' + message); } socket.emit('message' ,message); }); }); see here socket.emit('message',message); socket object contain id send message if want send message particular user know unique.id way send message every connection expect socket(mean current socket)
io.sockets.on('connection', function(socket) { if (!isinitiator) { isinitiator = true; socket.emit('initiatorfound', {setinitiator: isinitiator}); } else { socket.emit('initiatorfound', {setinitiator: !isinitiator}); } // signaling channel socket.on('message', function(message) { if (message.type == 'streamadd') { console.log('got message: ' + message); } socket.broadcast.emit('message' ,message); }); });
Comments
Post a Comment