资讯中心 | ![]() |
WebRTC空白/空视频的原因之一是高丢包率。在这种情况下,在服务器和客户端日志中会显示连接成功,视频播放正常,因此您不会看到任何警告或错误。 要检查是否存在高丢包率,您可以转到火狐上的about:webrtc或chrome上的chrome://webrtc-internals。对于firefox,您可以导航到"RTP Stats“。您将看到它显示Received: ... packets和Lost: ... packets。您可以使用这些计数来计算丢包率。对于chrome,有一个丢包率的图表。您可能有非常高的数据包丢失率,例如70%。 如果您有这种极高的数据包丢失率,其中一个原因是客户端网络接口上的MTU https://en.wikipedia.org/wiki/Maximum_transmission_unit比服务器使用的MTU小。例如,您的客户端网络接口在未连接到VPN时可以具有MTU=1500字节,在连接到VPN时可以具有MTU=1250字节。如果服务器使用MTU=1400发送RTP数据包(通过UDP),当客户端未使用VPN时,客户端可以接收它,但是大于1250字节的数据包将被客户端网络接口丢弃。 如果你想在本地检查客户端的MTU,你可以在mac或者linux上运行ifconfig。 Mac示例,不包含示例vpn: 代码语言:javascript复制en0: flags=8863 mtu 1500 ... inet SOME_IP netmask 0xffffff00 broadcast 192.168.1.255 media: autoselect status: activeMac示例,使用示例vpn: 代码语言:javascript复制utun2: flags=80d1 mtu 1250 inet SOME_IP --> SOME_IP netmask 0xffffffff nd6 options=201如何为服务器配置MTU: 如果对WebRTC服务器使用GStreamer,则有效负载生成器元素(例如rtpvp8pay )具有设置所需MTU值的属性。通过使用gst-inspect-1.0 rtpvp8pay,您可以看到,默认情况下,它使用1400作为MTU值,这可能大于您的客户端网络接口所能处理的值(例如,上例中的1250 )。您可以通过在您的GStreamer管道上设置较低的MTU来使其工作,这样您的客户端网络接口就不会再丢弃大多数包(只需在服务器上的GStreamer管道上更改MTU就可以将包丢失率降低到0.01% )。 在这种情况下,当VPN重新连接时,传入的视频可以工作约10秒,然后传入的视频可能会冻结,后续的页面刷新可能会导致70%+丢包的空白视频。 这是一个非常具体的场景,但当它发生时,它是一个完全静默/隐藏的错误,所以希望这能帮助一些人。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备16040606号-1 |