解決RTMP推流協議視頻直播點播平臺EasyDSS內直播列表信息偶爾不存在的問題

TSINGSEE青犀視頻團隊在最近一年內對大部分已經開發的視頻平臺做了一次大的調整和優化,諸如EasyDSS、EasyGBS等視頻平臺在界面、操作方式、功能上都有了不同程度的改變。EasyDSS視頻直播點播平臺開發簡單,提供編程語言無關化的RESTfulAPI接口,可以很便捷的進行二次開發和應用,在遠程教育、遠程醫療都具備優勢。

微信截圖_20201204152134.png

視頻平臺EasyDSS中如果在接入的設備過多的情況下,流媒體的處理系統偶爾會出現卡頓現象。此時如果頻繁的請求在線直播信息的話,直播列表可能爲空,導致直播列表信息返回爲空。

20.png

因爲一旦接入的數量過多,內核處理不過來,導致系統卡頓。這樣的應用層在請求流媒體服務的時候就會請求不到任何的數據,但此時之前的數據又被刪除了,所以出現了一小段時間的數據空白期。

因此解決問題的時候,我們就可以在項目啓動的時候開啓定時任務,每隔一秒鐘對流媒體系統發送http的請求,將請求到的數據進行及時的更新。

    if !gUpdateSession {

      gUpdateSession = true

      allInfos := make([]*SessionInfo, 0)
      // 1. 更新本地數據
      infos, err := getLiveSessions(consts.EmptyString)
      if err != nil {
         errorLogger.Error(err.Error())
      } else {
         allInfos = append(allInfos, *infos...)
      }

      // 2. 查看集羣,如果有集羣數據,則從集羣中更新數據到全局中
      servers := cluster.GetServerALL()
      if servers != nil {
         for _, server := range servers {
            infos, err = getLiveSessions(fmt.Sprintf("%v:%v", server[consts.FieldNameIP], server[consts.FieldNameDSSHttpPort]))
            if err != nil {
               errorLogger.Error(err.Error())
            } else {
               allInfos = append(allInfos, *infos...)
            }
         }
      }

      // 更新所有數據
      gLiveSessions.Update(allInfos)

      gUpdateSession = false
   }
}

更新後系統將會及時處理所有數據,避免空白段的情況出現。

21.png

該問題就此解決,如果大家比較關心我們前文提到的EasyDSS在實際項目中的運用,可以閱讀:遠程教育視頻直播點播解決方案如何實現教學直播+錄播+在線考試?

TSINGSEE青犀視頻雲邊端架構產品還包括EasyGBS、EasyNVR、EasyCVR等優秀的視頻智能分析平臺,歡迎大家瞭解和測試。

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