2015-03-24 2 views
1

Я использую socket.io и обслуживаю на node.js.Webrtc и socket.io: createanswer() всегда имеет ошибку. Зачем?. Мой код соединяет двух сверстников, но только один из них знает об этом?

Вот код на стороне клиента:

getUserMedia(constraints, handlemedia, error); 
function handlemedia(stream) { 
    localStream = stream; 
    attachMediaStream(localVideo, stream); 
    socket = io.connect(); 

    document.getElementById("connect").addEventListener("click", function(e){ 
     remoteVideo = document.getElementById("remoteVideo"); 
     console.log("We know what socket is.", socket); 
     servers = {"iceServers": [{ "url": "stun:stun.l.google.com:19302"}]}; 
     pc = new RTCPeerConnection(servers); 
     pc.onicecandidate = console.log("GOT CANDIDATE"); 
     pc.addStream(localStream); 

     pc.onaddstream = function(event) 
     { 
      attachMediaStream(remoteVideo, event.stream); 
     } 

     function error() 
     { 
      console.log("An error occurred in the create offer section. "); 
     } 
     sdpconstraints = {'mandatory': { 
     'OfferToReceiveVideo':true }}; 


     pc.createOffer(function(sessiondesc) 
     { 
     console.log("Socket attemp 2: ", socket); 
     pc.setLocalDescription(sessiondesc); 
     console.log("Offer: ", sessiondesc); 
     console.log("local description was set. Don't worry."); 
     socket.emit("sessiondesc", sessiondesc); 
     }, error, sdpconstraints); 


     socket.on("sessiondesc", function(sessiondesc) 
     { 
     console.log("WE GOT THE FUNCTION "); 
     sdpconstraints = {'mandatory': { 
     'OfferToReceiveVideo':true }}; 


     console.log("Your partner created an offer for you."); 

      pc.createAnswer(function(sessiondesc) 
      { 
       console.log("Socket attemp at create answer section: ", socket); 
       pc.setLocalDescription(sessiondesc); 
       console.log("Session description: ", sessiondesc); 
       console.log("Local desc for create answer section was set."); 
       socket.emit("sessiondesc", sessiondesc); 
      }, console.log("Error in create answer section occurred."), sdpconstraints); 

     }); 
    } 

} 

А вот код сервера, используя Node.js и Socket.io:

var io = require('socket.io').listen(app); 
io.sockets.on('connection', function(socket, webkitRTCPeerConnection,  client, id){ 

    socket.on("sessiondesc", function(sessiondesc) 
    { 
     console.log("Emitting session desc RIGHT NOW"); 
     socket.broadcast.emit("sessiondesc", sessiondesc); 
    }); 


}); 

Так что же происходит я открываю два вкладки в моем браузере, перейдите в localhost на обеих вкладках и убедитесь, что у меня консоль открыта для просмотра журналов.

Затем я нажимаю кнопку connect на первой вкладке. Он отображает журналы до «локального набора описаний, не беспокоиться», но на нем не отображается «МЫ НАЙТИ ФУНКЦИЮ», что имеет смысл, потому что я еще не подключился на другой вкладке.

Итак, перейдите на другую вкладку и нажмите «Подключиться». Теперь, на этой второй вкладке он отображает информацию только в локальном наборе описания, не волнуйтесь. Таким образом, очевидно, что вторая вкладка ничего не получает с первой вкладки! Зачем?

НО, когда я вернусь к первой вкладке, он получил что-то! Он прошел через часть «Мы получили функцию» моего кода. Затем он говорит: «Ваш партнер создал для вас предложение» Но проблема в следующем: «Ошибка в создании секции ответа», поэтому в createanswer произошла ошибка! Почему это? Почему это вызвало эту ошибку?

Он также не отображает удаленные видео на любой вкладке.

ответ

0

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

  • вы справляетесь sessiondesc из розетки только после того, как лица, нажимает на кнопку подключения, поэтому, когда tab1 излучает, что tab2 не Лови.
  • Во-вторыхи, когда tab2 отправляет предложение и tab1 пытается добавить его, это PeerConnection уже создала предложение, поэтому не может создать ответ (эта часть моего предположение, что PeerConnection может либо только создать предложение или создать ответ.)