zoukankan      html  css  js  c++  java
  • 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 连接。

    可正常播放。

  • 相关阅读:
    如何在Ubuntu Server 18.04上安装Microsoft的Procmon
    如何在Ubuntu 20.04上安装Wine 5.0
    如何在Kali Linux 2020中启用SSH服务
    如何在Ubuntu 20.04 LTS Focal Fossa上安装Apache Groovy
    如何使用命令在Ubuntu 20.04 Linux上安装Vmware Tools
    在Ubuntu 20.04 LTS Focal Fossa上安装Zabbix Agent
    hdu 2089 不要62
    hdu 2093 成绩排名
    hdu 2104 hide handkerchief
    leetcode147对链表进行插入排序
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/15657190.html
Copyright © 2011-2022 走看看