当前位置: 首页 > 工具软件 > WebRTC > 使用案例 >

webrtc 网络的一些坑(webrtc-streamer)

穆毅然
2023-12-01

1、使用VPN网络经常打不开视频。

webrtc网络是边收集网络环境信息,边交换。先收集到的是内网信息,然后是公网信息。如果在还未收集到公网信息的情况下,只拉取到内网信息。则在深信服的VPN环境下,webrtc-streamer服务器无法发送数据包到本地。

从接口/api/getIceCandidate的返回值可以看出问题。当缺少公网网络信息的时候,视频无法打开

[
    {
        "candidate" : "candidate:365427782 1 udp 2122260223 192.168.25.113 7998 typ host generation 0 ufrag 6HsH network-id 1 network-cost 50",
        "sdpMLineIndex" : 0,
        "sdpMid" : "0"
    },
    {
        "candidate" : "candidate:2282355315 1 udp 2122194687 10.10.125.113 18486 typ host generation 0 ufrag 6HsH network-id 2 network-cost 50",
        "sdpMLineIndex" : 0,
        "sdpMid" : "0"
    },
    {
        "candidate" : "candidate:155319495 1 udp 1685987071 xxx.xxx.xxx.xxx 18486 typ srflx raddr 10.10.125.113 rport 18486 generation 0 ufrag 6HsH network-id 2 network-cost 50",
        "sdpMLineIndex" : 0,
        "sdpMid" : "0"
    }
]

解决方法是:修改前端源码,延迟/api/getIceCandidate的调用。个人的环境延迟200毫秒即可

1.2 DNS

打不开视频还有一个原因,就是DNS服务器解析的STUN 服务器IP可能太远,不能及时收集到公网IP信息,导致视频打开不稳定。webrtc-streamer默认的stun服务器为:stun.l.google.com:19302。使用 ping stun.l.google.com 查看IP,测试了以下两个IP是比较稳定的。如果解析到其他IP请斟酌使用。

解决办法,修改DNS或者修改HOST

#108.177.125.127 stun.l.google.com
172.217.213.127 stun.l.google.com

2、服务器视频CPU拉满

webrtc-streamer实时转码非常消耗CPU资源,每一个客户端就要吃掉40%+的CPU。视频关掉的时候,一定要记得调用/api/hangup(disconnect)接口以关闭资源。不然会一直占用服务器资源,webrtc-streamer会一直转码和发送,占用网络和CPU

偶然看到网上说CPU占用过高可以使用 -o 参数,试了可用,一个视频要大概占4%-6%CPU,但是视频打开的速度会慢个2、3秒。同一个视频被打开多次也会增加CPU开销。

-o : use null codec (keep frame encoded) 字面意思是保持视频帧编码,也就是不解码的意思。难道是把解码的工作交给前端?但是我测试了一下,并没有明显的增加客户端CPU的使用率。

3、webrtc-streamer网络

打开一个视频,webrtc-streamer 会为每一个网卡(非loopback)绑定一个udp 和 tcp的端口,同时也会为连接到stun服务器的IP绑定一个端口

优先使用udp协议的端口,然后再使用tcp

host srflx prflx relay

host candidate:本机物理网卡或逻辑网卡地址和端口

srflx candidate:全称Sever Reflexive Candidate,端发送Binding请求到STUN/TURN Server经过NAT时,NAT上分配的地址和端口

prflx candidate:全称Peer Reflexive Candidate,端发送Binding请求到对等端经过NAT时,NAT上分配的地址和端口

relay candidate:全称Relayed Candidate,端发送Allocate请求到TURN Server,由TURN server用于中继的地址和端口

4、前端参数

/api/call?peerid=0.4629538284518011&url=%2Fstream%2Fdalajia102.flv&options=rtptransport%3Dtcp%26timeout%3D60

webrtc-streamer的demo在调用call方法的时候,会加上options这一个参数,而我们在自己的系统前端没有加,导致部分视频打不开,或者打开极慢。原因还不清楚

5、网络端口

webrtc使用网络打洞原理,会把请求的端口变成监听的端口。这是个随机端口,可以在webrtcstreamer里面配置开启的端口范围(-R Udp_port_min:Udp_port_min : Set the webrtc udp port range (default:0:65535) 我没有试过),如果服务器的端口不放开的话,会导致浏览器无法打开视频

 类似资料: