前段时间应项目要求在前端页面播网络摄像头传输的rtsp流,但是浏览器video组件并不支持直接播放rtsp流,需要进行转码解码等操作,本次使用的服务是webrtc-streamer

先说结论:

本地windows系统,按步骤运行webrtc-streamer.exe服务后,前端正常播放视频

服务器Linux系统CentOS7环境不能访问外网,按步骤部署webrtc-streamer服务后,前端无法正常播放视频

关于这方面的资料非常少,查阅了大量资料,WebRTC网络陷阱及解决策略:以webrtc-streamer为例-百度开发者中心最终在这篇文章中发现了端倪

前端在请求服务webrtc-streamer时,服务会请求一次STUN服务器默认地址,遂继续深究什么是STUN服务器,根据百度出的内容WebRTC连接方法:TURN与STUN服务器的作用解析-百度开发者中心

由此可以得知,如果STUN服务器访问不通,webrtc-streamer服务会继续请求TURN服务器来建立中继节点,所以我们可以从建立中继服务器入手。

通过./webrtc-streamer -h可以得到服务启动项配置

  General options
         -v[v[v]]                           : verbosity
         -V                                 : print version
         -C config.json                     : load urls from JSON config file
         -n name -u videourl -U audiourl    : register a stream with name using url
         [url]                              : url to register in the source list

  HTTP options
         -H hostname:port                   : HTTP server binding (default 0.0.0.0:8000)
         -w webroot                         : path to get static files
         -c sslkeycert                      : path to private key and certificate for HTTPS
         -N nbthreads                       : number of threads for HTTP server
         -A passwd                          : password file for HTTP server access
         -D authDomain                      : authentication domain for HTTP server access (default:mydomain.com)

  WebRTC options
         -S[stun_address]                   : start embeded STUN server bind to address (default 0.0.0.0:3478)
         -s[stun_address]                   : use an external STUN server (default:stun.l.google.com:19302 , -:means no STUN)
         -t[username:password@]turn_address : use an external TURN relay server (default:disabled)
         -T[username:password@]turn_address : start embeded TURN server (default:disabled)
         -R Udp_port_min:Udp_port_min       : Set the webrtc udp port range (default:0:65535)
         -W webrtc_trials_fields            : Set the webrtc trials fields (default:WebRTC-FrameDropper/Disabled/)
         -a[audio layer]                    : spefify audio capture layer to use (default:0)
         -q[filter]                         : spefify publish filter (default:.*)
         -o                                 : use null codec (keep frame encoded)
         -b                                 : use sdp plan-B (default use unifiedPlan)

可以看到WebRTC options中-s[stun_address]使用默认默认STUN server为stun.l.google.com:19302,但是在无法访问外网的服务器中是无法访问的,所以会继续请求TURN relay server,默认是禁用。

我们入手的思路就是搭建一个TURN relay server来建立中继服务器,我使用的是coturn服务,搭建的过程不再赘述,Linux中使用的docker镜像部署。

搭建好后将webrtc-streamer服务启动项设置为-tipaddress:port(中间不能有空格,ipaddress为coturn服务的IP,port为端口号默认3478)

至此前端再次访问webrtc-streamer即可正常播放rtsp流

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐