網絡IP攝像頭RTSP協議安防視頻平臺EasyNVR演示模式下rtsp地址無法播放原因分析

TSINGSEE青犀視頻雲邊端架構中很多產品由於開發架構類似,因此功能的實現過程或者出現的問題等都有類似的地方。比如我們先測試了EasyGBS演示模式下視頻播放的問題,隨後就發現了EasyNVR視頻平臺也出現了同樣類似的問題。

雲邊端2.png

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後綴。

44.png

45.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章