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

Posted TSINGSEE

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TSINGSEE青犀视频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 连接。

可正常播放。

以上是关于TSINGSEE青犀视频WebRTC播放Turn服务支持TCP连接功能的主要内容,如果未能解决你的问题,请参考以下文章

TSINGSEE青犀视频中关于WebRTC的stun/turn服务说明

TSINGSEE青犀视频构建pion webrtc运行broadcast示例步骤

TSINGSEE青犀视频开发webrtc中SDP信息解析

TSINGSEE青犀视频开发webrtc项目如何实现Windows视频采集?

TSINGSEE青犀视频开发WebRTC时通过哪些技术来创建WebRTC链接?

TSINGSEE青犀视频通过Webrtc编译android版本找不到gzip模块如何处理?