GB28181/RTSP/Ehome协议视频智能分析平台EasyCVR分组后调用接口没有返回对应的通道排查
EasyCVR视频平台是TSINGSEE青犀视频今年开发的新平台,经过不断测试后才上线,不过目前EasyCVR的功能也在更新中,我们最近就在测试EasyCVR的分组功能,测试完毕后会将该功能更新至最新版本中。
在我们测试EasyCVR分组功能时,给分组添加GB28181和Ehome协议的设备后,调用接口却没有返回对应的通道,但是数据库国标设备和Ehome设备却已经显示添加成功了。
数据库数据如下表,其中label_id是分组id;channel_id是通道id;channel_device_id是设备id,从表中可以看出分组12是拥有4,5,6三个设备的。
但是在调用接口返回数据只显示了一个。
以下是返回通道的代码:
func Getchannel(data interface{}) ([]map[string]interface{}, error) {
channels, ok := data.(*[]result)
rows := make([]map[string]interface{}, 0)
if !ok {
return rows, errors.New("数据格式错误")
}
fmt.Println(channels)
for _, value := range *channels {
if value.ChannelType == "GB" {
gbschannels := make([]*models.Channel, 0)
q := db.SQLite.Model(models.Channel{}).Where("index = ?", value.DeviceId)
q.Find(&gbschannels)
if len(gbschannels) != 1 {
continue
}
//设备下通道[名称][启用][在线][录像][音频][按需]字段转换
//[在线]
if gbschannels[0].Online() {
value.ChannelOnline = 1
} else {
value.ChannelOnline = 0
}
将打印出来的sql语句在数据库中执行,发现也是报错的:
SELECT * FROM “t_channels” WHERE (index = ‘6’)
经过查阅资料,我们了解到,index是数据库中的关键字,不能够当做列名直接查询,数据库关键字引用需要携带反引号。
修改后的代码如下:
修改后查询如下:
调用接口后通道返回成功。目前的EasyCVR版本中暂时没有该功能,不过在不久将会上线,如果大家需要测试EasyCVR,欢迎联系我们获取测试账号进行测试,更多视频相关解决方案,也可以联系我们了解。
EasyCVR视频播放: