RTMP协议视频推流智能分析平台EasyDSS直播点播系统视频广场无数据问题修复

TSINGSEE青犀视频云边端几个智能分析平台作为不同协议的视频流媒体服务平台,都能够进行视频直播、录像、回看、转码分发等功能,已经接入平台的视频通道会在视频广场处。

DSS12.png

在EasyDSS的最新项目中,我们发现查询视频广场无数据的问题,但是实际上后台存在数据。

我们随即进行测试,发送以下命令:

### 获取分享文件列表
POST http://localhost:10080/v1/vodFile/shareList
Accept: */*
Cache-Control: no-cache
Content-Type: application/json

{
  "start": 0,
  "limit": 10
}

最终返回结果如下,只能查询到0个数据。

61.png

但是到数据库中查看确实是存在数据的。以下数据中第一行 shared 被选中了,应该将此数据返回到前端。

62.png

查看代码如下,并打开调试模式,显示发送的数据库查询语句。

vodFiles := make([]*table.VodFile, 0)
ors := make([]string, 0)
wheres := make([]string, 0)
if like != consts.EmptyString {
   likeStr := "'%" + like + "%'"
   ors = append(ors, "name like "+likeStr)
}

wheres = append(wheres, "shared = 'true'")

total, err := impl.GetParts(&vodFiles, &ors, &wheres, sort, order, offset, limit)

return &vodFiles, total, err

数据库查询语句为:

63.png

将该语句直接使用第三方工具运行后,返回结果为0。EasyDSS视频平台对于数据库操作的框架使用的是gorm库,证明对于gorm关于布尔类型的数据查询使用不正确。

检查数据库语句,在数据库语句中出现了 shared=’true ’,数据库语句应该是 share=true ,去除两边的单引号才能查询成功。
因此尝试直接去除单引号,代码如下:

wheres = append(wheres, "shared = true")

修改成此操作后,后台直接提示查询数据库错误。后台错误为

64.png

说明此种修改直接将true作为一个字段进行查询了,因此发生错误,此种修改错误。
查询gorm官方的文档使用方法为

tx.Where("shared  = ?", true)

官网建议使用此种方式进行编写,但是因为模块化的原因,修改底层的写法,对于上层的修改工作量比较大,因此不采用此种解决方案。
继续尝试新的解决方案,按照如下方式修改。

wheres = append(wheres, "shared = '1'")

查询数据为1,也就是查询到了数据,该问题即可解决。

65.png

但通过该问题我们得知,在系统中直接写 shared=’true’,gorm 会将true直接转换成字符串的形式,因此检索失败。如果修改为 shared=’1’, 1 和布尔类型的true是同一种作用,因此起效。大家如果以后碰到类似gorm的问题,可以参考此种解决方法进行排查。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值