0

这是我的第一个 webRTC 项目,所以我在跟踪这类错误方面非常缺乏经验。特别是因为我使用的是这个NPM 包,所以我不知道如何处理这个错误消息。如果您点击该链接,我刚刚复制/粘贴了“使用”演示代码,但使用 Laravel echo 将其中一些替换为套接字以传输对等连接数据。在“使用”演示中,他们生成了一个“报价”对象,并让您将其粘贴到其他对等表单中。然后该客户端生成一个“答案”对象,当您将其粘贴到启动客户端的表单中时,就会建立连接。如果我这样做,一切正常。但是我正在尝试在所有客户端都准备好时建立自动连接。这是我的代码:

var Peer = require("simple-peer");

window.p = new Peer({
    initiator: location.hash === "#1",
    trickle: false
});

p.on("error", err => console.log("error", err));

p.on("signal", data => {
    if (location.hash === "#1") {
        $.ajax({
            url: "/autoCon",
            type: "get",
            data: {
                connectionData: JSON.stringify(data)
            },
            success: function() {
                console.log("sent: " + JSON.stringify(data));
            }
        });
    }
});

p.on("connect", () => {
    console.log("CONNECT");
});

然后在刀片文件上,我用 Echo 像这样收听:

 Echo.channel('myChannel')
      .listen('MyEvent', (e) => {
        p.signal(e.connectionData)
      });

现在对于错误:

Failed to execute 'setRemoteDescription' on 'RTCPeerConnection': Failed to set remote offer sdp: Failed to apply the description for 0: Failed to setup RTCP mux.

如果我控制台 log p.signal(e.connectionData),它显示“未定义”,这很奇怪,因为它正在生成“答案”对象并以文本形式显示到页面。所以我尝试做的是 ajax 将初始的“offer”对象发送到第二个对等点,然后在套接字接收到数据时获取它的“answer”对象并发出信号让发起对等点进行连接。但它给了我这个错误。任何人都可以帮忙吗?

4

1 回答 1

0

我最终弄清楚了这一点。这是我的最终代码。这可能很乱,但我花了大约 6 个小时到晚上,这让我的大脑受伤了 XD。如果有人可以就如何清理它提供一些建议,我很乐意接受它,但这可以正常工作。

在 app.js 中:

p.on("signal", data => {
    //document.querySelector("#outgoing").textContent = JSON.stringify(data);
    $.ajax({
        url: "/autoCon",
        type: "get",
        data: {
            conData: JSON.stringify(data)
        }
    });
});

在我的刀片文件中使用 Echo:

var signalData = []
Echo.channel('myChannel')
          .listen('MyEvent', (e) => {
            signalData.push(e.conData)
            if(e.conData.includes('offer') && location.hash !== '#1'){
              console.log('received offer')
              p.signal(JSON.parse(e.conData))
            } else {
              if(e.conData.includes('answer') && location.hash === '#1' ){
              console.log('received answer')
              p.signal(JSON.parse(signalData[1]))
              }
            }
          });
于 2020-05-03T14:55:53.257 回答