WebRTC多个对等连接

时间:2018-10-04 05:39:57

标签: javascript webrtc peer simplewebrtc openwebrtc

我几乎在所有地方搜索过,由于某种原因,似乎在这种情况下找不到任何资源。任何帮助将不胜感激。

问题是这样的:

我有4个用户。可以说:A,B,C和D。我想根据网址进行匹配。例如,如果A和B连接到&room = 1,C和D连接到&room = 2,我想在A和B对以及C和D对之间建立连接。

当前我的代码仅在A和B之间建立连接,并且如果C或D用户之一发起呼叫,则A和B之间的连接将断开,而C无法找到D。


为了解决这个问题,我试图创建一个像这样的对象:

{     房间:1     对等方:RTCPeerConnection }

并将其存储在数组中,并根据房间ID获取对等连接,并根据根据roomId存储的RTCPeerConnection建立连接。但这没用。

在不建立处理该通信的套接字服务器的情况下,如何解决此问题?


我目前以这种方式建立连接,如果有帮助的话:

navigator.mediaDevices
    .getUserMedia({
        audio: true,
        video: true
    })
    .then(function (stream) {
        localStream = stream;
        localVideo.srcObject = localStream;
        try {
            conn = new RTCPeerConnection(servers);
        } catch (err) {
            console.log("Can't establish connection");
            return;
        }
        localStream.getTracks().forEach(function (track) {
            conn.addTrack(track, localStream);
        });
        conn.onaddstream = function (event) {
            setTimeout(() => {
                callButton.click();
            }, 2000);
            remoteVideo.srcObject = event.stream;
        };
        conn.onicecandidate = function (event) {
            if (event.candidate) {
                chat.server.iceCandidate(
                    JSON.stringify({ candidate: event.candidate })
                );
            }
        };
    })
    .catch(function (err) {
        console.log("Error", err);
    });

这是我失败的解决方案:

    var connections = JSON.parse(localStorage.getItem("connections")) || [];
    var connection;
    if (connections) {
        connection = connections.find(function (conn) {
            return conn.id = roomId;
        })
    }
    if (!connection) {
        conn = new RTCPeerConnection(servers);
        var data = {
            id: roomId,
            peer: conn
        }
        localStorage.removeItem("connections");
        localStorage.setItem("connections", JSON.stringify(connections));
    } else {
        conn = JSON.parse(connection.peer);
        conn.__proto__ = new RTCPeerConnection();
    }

此操作失败是因为您当然不能在localStorage(RTCPeerConnection)中存储对象的 proto 。当我进行字符串化/解析时,对等属性作为一个空对象出现。如果我尝试使用全局变量而不是localStorage,则它始终为空。我非常感谢有关此问题的任何提示。

1 个答案:

答案 0 :(得分:0)

就像您搞砸了localStorage变量一样,出于测试目的并避免了信令服务器的实现,我建议使用serverless-webrtc或更新的by jameshfisher

由此,您可以创建房间(分隔客户端)并显示一条sdp消息,以复制并粘贴到其他客户端(不使用localStorage)以建立对等连接。 最好在浏览器的Firefox <-> chrome,safari等之间进行测试。