zoukankan      html  css  js  c++  java
  • 网络IP摄像头RTSP协议安防视频平台EasyNVR演示模式下rtsp地址无法播放原因分析

    TSINGSEE青犀视频云边端架构中很多产品由于开发架构类似,因此功能的实现过程或者出现的问题等都有类似的地方。比如我们先测试了EasyGBS演示模式下视频播放的问题,随后就发现了EasyNVR视频平台也出现了同样类似的问题。

    EasyNVR演示模式下获取到的RTSP地址无法播放,演示模式是之前添加的新功能,主要是为了实现在演示模式下,播放几分钟后(这个几分钟可以在配置文件配置的)断流,让这个流不能在播放。

    func wrapURLWithLiveToken(rawURL string, c *gin.Context) (wrapURL string) {
       wrapURL = rawURL
       demo := utils.Conf().Section("base_config").Key("demo").MustBool(false)
       if !demo {
          return
       }
       if rawURL == "" {
          return
       }
       _url, err := url.Parse(rawURL)
       if err != nil {
          return
       }
       q := _url.Query()
       //token := utils.MD5(sessions.Default(c).ID() + rawURL)
       token := createRandomString(8)
       q.Set("token", token)
       _url.RawQuery = q.Encode()
       wrapURL = _url.String()
       liveTokenCache.SetDefault(token, wrapURL)
       return
    }
    

      

    该处代码就是在流地址后面添加token的地方。

    目前EasyNVR对外提供的流有这几种格式的:WS-FLV、HTTP-FLV、HLS、RTMP、RTSP,其中前4种格式都是可以播放的,只有RTSP流地址比较特殊,该流地址后不能添加标识符,不然不能播放,我们将其排除出去即可。

    if _url, ok := ack.EasyDarwin.Body["URL"].(string); ok {
       if !strings.EqualFold(params["protocol"], "RTSP") {
          ack.EasyDarwin.Body["URL"] = wrapURLWithLiveToken(_url, c)
       }
    }
    

      

    这个地方先判断,如果想要获取RTSP流地址,就不进行token后缀的添加。
    这样返回的RTSP流地址就不会带有token后缀。

     
  • 相关阅读:
    JVM 常用参数设置(针对 G1GC)
    Java 字符串常量池 及 intern 方法的使用
    JDK 1.8 Metaspace 详解
    JDK 1.8 MetaSpace(元空间)介绍及调优
    Git 统计代码行数
    王永庆传-读书笔记2
    王永庆传-读书笔记1
    董明珠:女人真想干点事,谁也拦不住
    esxi5.5安装nvme驱动
    nvme ssd的一些相关知识点
  • 原文地址:https://www.cnblogs.com/EasyNVR/p/13931316.html
Copyright © 2011-2022 走看看