1. 程式人生 > 實用技巧 >【開發記錄】國標GB28181/RTSP/SDK/Ehome協議視訊監控平臺EasyCVR如何效仿EasyGBS國標平臺新增分組功能?

【開發記錄】國標GB28181/RTSP/SDK/Ehome協議視訊監控平臺EasyCVR如何效仿EasyGBS國標平臺新增分組功能?

TSINGSEE青犀視訊雲邊端架構產品在接入多級通道時,在視訊調閱側邊欄都會顯示分欄選單,目的是為了讓通道的區分更加清晰。比如國標GB28181協議視訊平臺EasyGBS視訊調閱介面左側的選單欄如下所示:

目前EasyCVR視訊平臺的播放介面左側選單欄沒有分組,所有通道統一列在左側側邊欄,我們最新的EasyCVR版本將新增選單欄分組的介面,將通道劃分到指定的組中,在通過分組形式檢視通道。

TSINGSEE青犀視訊研發團隊在EasyCVR內添加了如下介面來呼叫側邊欄分組:

func (h *APIHandler) AddLabel_V2(c *gin.Context) {
	var err error
	defer func() {
		if p := recover(); p != nil {
			err = fmt.Errorf("%v", p)
		}
		if err != nil {
			c.AbortWithStatusJSON(400, err.Error())
			return
		}
	}()
	labelname := c.PostForm("labelname")
	channels := c.PostForm("channels")
	type channelanddevice struct {
		ChannelID string
		DeviceId  string
	}
	var channels_arr = make([]channelanddevice, 0)
	err = json.Unmarshal([]byte(channels), &channels_arr)
	if err != nil {
		return
	}

	dbclient := cvrdao.GetDB()
	tx := dbclient.Begin()
	labelModel := cvrdo.Label{}
	var totalcount int
	dbclient.Where("name=?", labelname).Find(&labelModel).Count(&totalcount)
	if totalcount > 0 {
		tx.Rollback()
		c.IndentedJSON(400, "分組名稱重複")
		return
	}
	labelModel.Name = labelname
	labelModel.CreateTime = time.Now()
	labelModel.UpdateTime = time.Now()
	dbclient.Save(&labelModel)
	if labelModel.ID <= 0 {
		c.IndentedJSON(400, "新增分組失敗")
		return
	}
	for _, v := range channels_arr {
		if v.DeviceId == "" || v.ChannelID == "" {
			c.IndentedJSON(400, "裝置或通道不存在")
			tx.Rollback()
			return
		}
		var temp = cvrdo.LabelChannel{
			ChannelDeviceId: v.DeviceId,
			ChannelId:       v.ChannelID,
			LabelId:         labelModel.ID,
		}
		err = dbclient.Create(&temp).Error
		if err != nil {
			tx.Rollback()
			return
		}

	}
	tx.Commit()
	c.IndentedJSON(200, gin.H{
		"state": "success",
	})
}

測試呼叫該介面檢查是否滿足要求,可以看到呼叫成功,滿足需求。

視訊融合平臺EasyCVR的新版在近期將會發布至TSINGSEE青犀視訊官方網站上,最新的功能也將更新上去,大家到時可以下載最新版本進行測試。

EasyCVR視訊安防雲服務支援傳統網路攝像機、NVR、編碼器、SDK等裝置,最大程度的提高了硬體裝置的相容性,並且可直接對接阿里雲、騰訊雲、華為雲、七牛雲等,支援S3和Swift介面的物件儲存服務,簡單配置,部署更高效。如有需求,歡迎瞭解。