【问题标题】:webRTC: Video stream plays on local but doesn't play on remotewebRTC:视频流在本地播放,但不在远程播放
【发布时间】:2021-06-18 19:18:31
【问题描述】:

建筑师

  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 时设置为<video> 组件的srcObject

问题

上述设置在本地网络的情况下完美运行。主持人和同伴都选择了host 候选人,视频播放完美。

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

chrome://webrtc-internals 清楚地表明 Transport 选择了正确的候选者,但所选的 local 候选者没有流量。

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

调试信息

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

pliCount:
 local: 5
 remote: 221

nackCount:
 local: 7
 remote: 2577

【问题讨论】:

    标签: webrtc video-streaming stun


    【解决方案1】:

    对我来说,这听起来像是丢包。有几件事可能导致它。

    您可以尝试降低发送内容的比特率吗?看看是不是拥塞造成的。

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

    【讨论】:

    • 谢谢。这完美地工作。修复它的是 MTU 大小。我很好奇您是如何达到 1280 作为 MTU 大小的。是 1200(webRTC) + 标头吗?
    • 当我很久以前调试时,我偶然发现了stackoverflow.com/questions/47635545/…,现在 1280 是我一直使用的第一个值 :) 1200 实际上是一个更好的选择,这就是 Pion 使用的 MTU !
    猜你喜欢
    • 2020-09-01
    • 2020-10-10
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多