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

Popular posts from this blog

user interface - How to replace the Python logo in a Tkinter-based Python GUI app? -

objective c - Greedy NSProgressIndicator Allocation -

how to set an OCR language in Google Drive -