-1

ほぼすべての場所を検索しましたが、何らかの理由でこのシナリオに関するリソースが見つからないようです。どんな助けでも大歓迎です。

問題はこれです:

4人のユーザーがいます。言いましょう:A、B、C、D。URLに従ってそれらを一致させたいです。たとえば、A と B が &room=1 に接続し、C と D が &room=2 に接続する場合、A と B のペアと C と D のペアの間で接続を確立したいと考えています。

現在、私のコードは A と B の間の接続のみを確立し、C または D ユーザーのいずれかが通話を開始すると、A と B の間の接続が切断され、C は D を見つけることができません。


この問題を解決するために、次のようなオブジェクトを作成しようとしました。

{ ルーム: 1、ピア: RTCPeerConnection }

それを配列に格納し、room 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) に保存できないため、これは失敗します。文字列化/解析すると、ピア属性が空のオブジェクトになります。localStorage の代わりにグローバル変数を試してみると、常に空になります。この問題に関するヒントをいただければ幸いです。

4

1 に答える 1