Webrtc和socket.io:createanswer()总是有错误。为什么?。我的代码连接两个对等体,但只有一个知道它吗?

时间:2015-03-24 22:04:24

标签: javascript node.js socket.io webrtc p2p

我正在使用socket.io并在node.js上提供服务。

以下是来自客户端的代码:

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,并确保我打开控制台以查看日志。

然后我点击第一个标签上的连接。它显示日志到"本地描述设置不用担心",但它不显示"我们得到的功能"东西,这是有道理的,因为我还没有在另一个标签上连接。

所以我转到其他选项卡,然后单击“连接”。现在,在第二个选项卡上,它只显示本地描述集中的内容,不用担心。显然,第二个标签没有从第一个标签中接收任何内容!为什么?

但是当我回到第一个标签时,确实收到了一些东西!它经历了"我们得到了功能"我的部分代码。然后它确实说"你的合作伙伴为你创造了一个报价" 但问题是,它接下来要说的是#34;创建答案部分"中的错误,所以在createanswer中出现错误!为什么是这样?为什么叫这个错误?

它也不会在任何标签上显示任何远程视频。

1 个答案:

答案 0 :(得分:0)

我已经能够识别您的代码中的几个问题......

  • 只有在用户点击连接按钮后才能从套接字处理sessiondesc,所以当tab1发出时,tab2不会捕获它。
  • 其次,当tab2发送商品并且tab1尝试添加商品时,它的peerConnection已经创建了商品,因此无法创建答案(这部分是我的假设,即PeerConnection可以只创建商品或创建答案。)