javascript - Webrtc 和 socket.io : createanswer() always has an error. 为什么?我的代码连接了两个对等点,但只有其中一个知道这一点?

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


 });

因此,我在浏览器中打开两个选项卡,在两个选项卡上都转到本地主机,并确保打开控制台以查看日志。

然后我单击第一个选项卡上的“连接”。它显示日志到“本地描述集,不用担心”,但它不显示“我们得到了功能”的东西,这是有道理的,因为我还没有在其他选项卡上连接。

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

但是当我返回第一个选项卡时,它确实收到了一些东西!它经历了我的代码的“我们得到了函数”部分。然后它确实说“你的合作伙伴为你创建了一个报价” 但问题是,接下来它说的是“创建答案部分出错”,所以创建答案中有一个错误!为什么是这样?为什么会调用这个错误呢?

它也不会在任何选项卡上显示任何远程视频。

最佳答案

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

  • 仅在用户单击连接按钮后,您才从套接字处理 sessiondesc,因此当 tab1 发出该 session 时,tab2 不会捕获它。
  • 其次,当tab2发送offer并且tab1尝试添加它时,它的peerConnection已经创建了offer,因此无法创建answer(这部分是我的假设,PeerConnection只能创建offer或创建answer。)

关于javascript - Webrtc 和 socket.io : createanswer() always has an error. 为什么?我的代码连接了两个对等点,但只有其中一个知道这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29243759/

相关文章:

node.js - 为什么 "babel-node"会旋转 2 个进程?

swift - 在 swift 4 中使用 SocketIO 时丢失对变量的引用

javascript - SailsJS,SocketIO,没有收到消息

javascript - ScrollMagic.js - 如何在部分滑动后添加内容?

javascript - 对集合中的条目进行分类

javascript - 如何检测某个对象是否是 Sails.js 中的 Waterline 模型或模型集合

node.js - 无法通过 socket.io 将我的 swift 应用程序连接到 node.js

javascript - 如何在 C# 中获取 javascript 代码的语法错误

javascript - 如何从表单异常中获取一些特殊名称的json对象?

node.js - 在所有日志中打印bunyan中间件reqId