TSINGSEE青犀视频WebRTC播放Turn服务支持TCP连接功能

news/2024/5/17 19:25:18 标签: WebRTC, Turn服务, TCP

在 EasyDSS、EasyNVR、EasyCVR、EasyGBS 等视频平台中支持 WebRTC 播放功能,其中有个流程需要到 stun/trun 服务器中进行网络打洞操作。

该服务代码中,原始仅支持 UDP 的连接,在部分情况下,防火墙开启后,会将 UDP 包拦截导致无法连接,因此修改代码支持 TCP 连接的功能。

原始 UDP 连接的代码如下:

udpListener, err := net.ListenPacket("udp", "0.0.0.0:"+strconv.Itoa(config.UdpPort))
if err != nil {
   gErrorLog.Panic("Failed to create TURN server udp listener: %s", zap.Error(err))
   os.Exit(0)
}
server.udpListener = udpListener

turnServer, err := turn.NewServer(turn.ServerConfig{
   Realm:       config.Realm,
   AuthHandler: server.HandleAuthenticate,
   PacketConnConfigs: []turn.PacketConnConfig{
      {
         PacketConn: udpListener,
         RelayAddressGenerator: &turn.RelayAddressGeneratorStatic{
            RelayAddress: net.ParseIP(config.PublicIP),
            Address:      "0.0.0.0",
         },
      },
   },
})

在该代码上添加对应的 TCP 监听连接代码如下:

udpListener, err := net.ListenPacket("udp", "0.0.0.0:"+strconv.Itoa(config.UdpPort))
if err != nil {
   gErrorLog.Panic("Failed to create TURN server udp listener: %s", zap.Error(err))
   os.Exit(0)
}
server.udpListener = udpListener

tcpListener, err := net.Listen("tcp", "0.0.0.0:"+strconv.Itoa(config.TcpPort))
if err != nil {
   gErrorLog.Panic("Failed to create TURN server tcp listener: %s", zap.Error(err))
   os.Exit(0)
}
server.tcpListener = tcpListener

turnServer, err := turn.NewServer(turn.ServerConfig{
   Realm:       config.Realm,
   AuthHandler: server.HandleAuthenticate,
   PacketConnConfigs: []turn.PacketConnConfig{
      {
         PacketConn: udpListener,
         RelayAddressGenerator: &turn.RelayAddressGeneratorStatic{
            RelayAddress: net.ParseIP(config.PublicIP),
            Address:      "0.0.0.0",
         },
      },
   },
   ListenerConfigs: []turn.ListenerConfig{
      {
         Listener: tcpListener,
         RelayAddressGenerator: &turn.RelayAddressGeneratorStatic{
            RelayAddress: net.ParseIP(config.PublicIP),
            Address:      "0.0.0.0",
         },
      },
   },
})

使用 netListener() 监听对应的 TCP 端口,再将对应的 TCP 连接加入到 ListenerConfigs 中。在对应的产品配置文件中修改配置使用 TCP 连接。

image.png

可正常播放。

image.png


http://www.niftyadmin.cn/n/1611374.html

相关文章

一台手机玩转你所有的社交生活(Android版)

警告:如果你希望和你现实中的朋友继续保持紧密联系的话就不要看这篇文章了,看完你会更加沉迷在社交网络中无法自拔的。一句玩笑话,大家别当真,下面小编来向大家介绍几款Android社交网络应用。 在几年前,你还需要通过电…

电商直播运营如何做?目的+定位+团队不可或缺

如今的电商直播市场竞争越来越激烈,想要在夹缝中求生,不仅仅需要脱颖而出的技能给,也要搭建好基础的电商直播运营体系,下面我们就这个话题来聊聊吧。 1、直播目的一定要先确定好 如果在直播开始之前,没有明确目标&…

无人机与推流直播平台助力道路交通安全管理

一、方案背景 无人机带给人们生活的便利相信大家都深有体会,凭借着低成本、易操纵、灵活度高及可低空飞行等特点,在森林防火、物流运输、公安执法、土地测绘、消防救援等领域都已经深入应用。而且与传统的安防监控相结合后,无人机监控可移动…

Facebook收购专利更多针对Google而不是Yahoo

过去几个月里Facebook买下IBM和微软许多项专利,普遍的看法是为了对抗Yahoo的专利指控,这导致是它的专利组合(一个公司所拥有的全部专利)成倍在增长。在从微软获得获得650项前AOL专利后,Facebook现在大约有1400项专利资…

EasyGBS在网页流量统计的地方出现统计不准的问题优化

EasyGBS视频平台在去年研发了不少的功能更新,比如告警功能、语音对讲等。今年也在持续对这些功能进行各项适配性的测试,目前我们也在开发一些智能分析相关的服务,如果大家有兴趣可以关注我们的博客,我们将不定期在博客内分享我们的…

小程序直播带货如何做?直播前中后三大点一定要做好

近两年,电商直播很火,火到一夜之间会出现好几个数亿级别的直播间,直播造就了李佳琦、薇娅等主播的成功,这也让不少中小商家眼热。但在激烈的市场竞争下,中小商家好像很难在这个品牌直播满天飞的市场中赢得胜利&#xf…

微软发布智能家居操作系统白皮书

最近微软研究部门对外公布了一个标题为“家庭操作系统(An Operating System for the Home)”的白皮书,该公司正在通过软件开发让家居生活更为智能。 通过这个家居智能系统,使得用户的生活更为便利。用户完全可以通过手机发出指令…

EasyCVR中如何为systemd服务设置ulimit值?

EasyCVR 在 Linux 服务器中如果遇到多路数接入,需要设置 ulimit。这篇文章解释了如何更改 ulimit 限制,例如 systemd 服务的最大打开文件数。在CentOS/RHEL 7 或 8 系统中,/etc/security/limits.conf 或 /etc/security/limits.d/ 中所做的更改…