Pion 自定义 SFU 服务器无法在内部工作 docker

Pion custom SFU server not working inside docker

我遵循了这个例子:https://github.com/pion/example-webrtc-applications/tree/master/sfu-ws

在docker我打开的端口范围:

端口6061不安全,用于测试。

在我的服务器上,我使用了相同的端口:

se := webrtc.SettingEngine{}
se.SetEphemeralUDPPortRange(50000, 50200)
WebRTCApi = webrtc.NewAPI(webrtc.WithMediaEngine(getPublisherMediaEngine()), webrtc.WithSettingEngine(se))

但我在服务器或客户端上都没有得到 onTrack。 我看到的,在我收到的服务器上

PeerConnectionStateFailed

我用的是google stun,客户端有free turn server

var config = {
            iceServers: [{
                urls: ["stun:stun1.l.google.com:19302"]
            },
            {
                urls: 'turn:numb.viagenie.ca:3478',
                credential: 'xxxx',
                username: 'xxxx@gmail.com'
            }
            ]
        };
        pc = new RTCPeerConnection(config)

如果您有任何想法,我将不胜感激。

问题是 Pion(或任何 WebRTC 实现)只知道它正在侦听的 IP 地址。它无法知道 map/forward 到它的所有地址。人们也将其称为 Public IPNAT Mapping。因此,当 Pion 发出候选人时,他们可能看起来像 10.10.0.*,而远程对等方将无法联系到它。

您应该做的是使用 SettingEngine 并设置 SetNat1To1IPs。如果您知道主机的 public IP,它将使用 public IP 重写候选。

ICE 是一个棘手的过程。从概念上理解它 WebRTC for the Curious#Networking 可能会有所帮助。一定会尽快回答任何后续问题!