微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

webRTC:视频流在本地播放但不在远程播放 架构师问题调试信息

如何解决webRTC:视频流在本地播放但不在远程播放 架构师问题调试信息

架构师

  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 来接受提议并以答案进行响应。只有在远程对等点上收集了所有候选人之后,才会发送答案。 IE。在收到 "" 候选人之后

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

pc.addTransceiver("video",{ direction: "recvonly" });
  1. 当接收到 onTrack 事件时,stream添加一个变量中,并且仅在 srcObject 发生变化时设置为 <video> 组件的 iceConnectionState connected

问题

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

当使用远程连接时,在 STUN (srflx) 候选和 TURN(relay) 候选的情况下,视频不会播放。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。