WebRTC 未连接外部网络

问题描述

我正在为 shapez.io、多人游戏制作一个模组,但我在使用 webRTC 时遇到了一些问题。

当我在本地运行两个客户端时,它们可以通过外部信令服务器进行连接。因此他们可以通过数据通道进行通话。

我正在使用来自他们未连接的不同网络的客户端。没有错误,但是报价和答案是通过信令服务器发送的。

我不太了解 webRTC,所以希望有人能帮助我。

当前的 github 代码在线于 https://thomasbrants.nl/shapez.io-multiplayer/。 转到多人游戏 -> 新游戏或继续游戏 -> 输入 from tkinter import * tkinter.messageBox.showinfo("Hello ") -> 你会得到一个 uuid 打开一个新客户端->多人游戏->加入->输入wss://thomasbrants.nl:8888->输入uuid

Github:https://github.com/DJ1TJOO/shapez.io/tree/multiplayer

代码生成一个 uuid,用户可以共享它。它连接到信令服务器并使用 uuid 创建一个房间。然后当 createPeer 被调用时,它会尝试连接到一个对等点。

wss://thomasbrants.nl:8888

这里放入uuid,然后连接到信令服务器。并尝试建立连接。

this.connectionId = uuidv4();
                // @ts-ignore
                var socket = io(this.host,{ transport: ["websocket"] });
                var socketId = undefined;

                var connections = [];
                socket.on("connect",() => {
                    socket.on("id",id => {
                        socketId = id;
                    });
                    socket.emit("createRoom",this.connectionId);

                    //Create peer
                    socket.on("createPeer",async data => {
                        const config = {
                            iceServers: [{
                                urls: "stun:stun.1.google.com:19302",},],};
                        const pc = new RTCPeerConnection(config);
                        const dc = pc.createDataChannel("game",{
                            negotiated: true,id: 0,});

                        //Create offer
                        await pc.setLocalDescription(await pc.createOffer());
                        pc.onicecandidate = ({ candidate }) => {
                            if (candidate || pc.signalingState === "stable") return;
                            console.log("Offer send");
                            console.log(pc.signalingState);
                            console.log(pc.getStats);
                            socket.emit("offer",{
                                offer: pc.localDescription.sdp,socketIdReceiver: socketId,socketIdSender: data.socketIdSender,room: data.room,});
                        };

                        //Answer
                        socket.on("answer",data => {
                            if (data.socketIdReceiver !== socketId || pc.signalingState === "stable") return;
                            pc.setRemoteDescription({
                                type: "answer",sdp: data.answer,});
                            console.log("Answer received");
                            console.log(pc.signalingState);
                            console.log(pc.getStats());

                            var onopen = event => {
                                //not empty but not related
                            };

                            var onMessage = ev => {
                                //not empty but not related
                            };

                            dc.onopen = onopen;
                            dc.onmessage = onMessage;
                            onopen();

                            pc.ondatachannel = event => {
                                let receiveChannel = event.channel;
                                receiveChannel.onmessage = onMessage;
                                receiveChannel.onopen = onopen;
                            };
                            connections.push({ pc: pc,dc: dc });
                        });
                    });
                });

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...