天天看點

國标視訊雲平台EasyGBS向多個級聯平台上傳通道的異常現象分析與解決

國标視訊雲服務EasyGBS支援裝置/平台通過國标GB28181協定注冊接入,并能實作視訊的實時監控直播、錄像、檢索與回看、語音對講、雲存儲、告警、平台級聯等功能。其中,級聯功能可以實作平台與平台之間的資料互聯互通,降低資料共享難度,在很多安防場景中均有應用,如明廚亮竈、平安鄉村等。

國标視訊雲平台EasyGBS向多個級聯平台上傳通道的異常現象分析與解決

我們在測試平台功能時發現,當EasyGBS向多個上級平台級聯,選擇通道時,會出現選中其他級聯平台的通道,影響到前一個平台的裝置選擇。

國标視訊雲平台EasyGBS向多個級聯平台上傳通道的異常現象分析與解決
國标視訊雲平台EasyGBS向多個級聯平台上傳通道的異常現象分析與解決

于是我們對該情況進行了排查。經過分析發現,在級聯選擇通道時,沒有指定級聯資訊的ID,是以出現了上述情況,如圖所示:

國标視訊雲平台EasyGBS向多個級聯平台上傳通道的異常現象分析與解決
else if opt == "del" {
    for i, v := range ids {
      ids := strings.Split(v, ",")
      if len(ids) != 2 {
        break
      }
      if i == 0 {
        sql = fmt.Sprintf(`(channel_id = '%s' and device_id = '%s' )`, ids[0], ids[1])
      } else {
        sql = fmt.Sprintf(` %s or (channel_id = '%s' and device_id = '%s')`, sql, ids[0], ids[1])
      }
    }
    if len(ids) > 0 {
      if err := db.SQLite.Delete(models.CascadeChannel{}, sql).Error; err != nil {
        c.AbortWithStatusJSON(400, err.Error())
        return
      }
    }

  }
        

可添加如下代碼:

國标視訊雲平台EasyGBS向多個級聯平台上傳通道的異常現象分析與解決
for i, v := range ids {
      ids := strings.Split(v, ",")
      if len(ids) != 2 {
        break
      }
      if i == 0 {
        sql = fmt.Sprintf(`(channel_id = '%s' and device_id = '%s' and cascade_id = '%d')`, ids[0], ids[1], cascade_id)
      } else {
        sql = fmt.Sprintf(` %s or (channel_id = '%s' and device_id = '%s' and cascade_id = '%d')`, sql, ids[0], ids[1], cascade_id)
      }
    }
    if len(ids) > 0 {
      if err := db.SQLite.Delete(models.CascadeChannel{}, sql).Error; err != nil {
        c.AbortWithStatusJSON(400, err.Error())
        return
      }
    }