webRTC:视频流在本地播放但不在远程播放

webRTC: Video stream plays on local but doesn't play on remote

建筑师

  1. 一个网页使用 RTCPeerConnection 创建连接。它在其配置中使用了一个 STUN 和一个 TURN 服务器。只有在收集到所有候选人后,它才会创建报价并向远程客户端发送报价
if(pc.iceGatheringState === "complete"){
            const resp = await fetch("REMOTE URL", {
                method: "post",
                body: JSON.stringify({
                    offer: btoa(JSON.stringify(pc.localDescription)),
                }),
            });
            const sdp = await resp.text();
            pc.setRemoteDescription(
                new RTCSessionDescription(JSON.parse(atob(sdp)))
            ).catch((e) => console.log(e));
        }
  1. 远程 (GO) 服务器使用 REST API 接受 offer 并使用 answer。只有在远程对等点上收集了所有候选者后,才会发送答案。 IE。在收到 "" 个候选人后

  2. 远程服务器有一个正在发送到主机的本地 RTP 流。主机在发送 offer

    之前添加一个收发器
pc.addTransceiver("video", { direction: "recvonly" });
  1. 当接收到 onTrack 事件时,stream 被添加到一个变量中,并且当 iceConnectionState 更改为 connected

问题

以上设置在本地网络中完美运行。主持人和同行都选择了 host 候选人,视频播放完美。

使用远程连接时,无论是 STUN (srflx) 候选还是 TURN(中继)候选,视频都不会播放。

chrome://webrtc-internals 清楚地表明交通部门选择了正确的候选人,但所选的 local 候选人没有交通。

我可以使用远程对等端上的 UDP 转储看到视频流正在完美发送。

调试信息

  1. 在远程网络上,使用 srflex 候选,nackpli 计数与本地网络相比非常高
For approx 15 sec of video

pliCount:
 local: 5
 remote: 221

nackCount:
 local: 7
 remote: 2577

这听起来像是丢包。有几件事可能会导致它。

能否尝试降低发送内容的比特率?看看是不是拥堵造成的。

您可以尝试降低 MTU 吗?如果您从 FFMPEG 转发数据包,请尝试将 pkt_size 附加到 URL,例如 this