国标GB28181协议国标视频平台国标流媒体服务器EasyGBS向上级联多个平台设备及通道选择错位问题解析
在EasyGBS的平台级联功能测试中,我们发现一个问题,就是当EasyGBS向多个上级平台级联的时候,会出现选择前后一个平台的通道,影响到前一个平台的设备选择的情况。
经过排查分析,发现是在级联选择通道的时候,没有指定级联信息的id。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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 } } } |
需要添加以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 } } |
前端修改后一切正常,也不会影响到别的级联信息。
TSINGSEE青犀视频团队曾经介绍过不少平台对接EasyGBS的方法,比如:EasyGBS客户端作为上级平台如何跟下级海康8700平台对接,EasyGBS如何对接英飞拓视频服务平台,国标流媒体服务器对接中兴力维平台。大家可以了解一下。
目前我们也已经推出国标GB28181视频平台EasyGBS推流软件EasyGBD,在使用手机等移动设备进行执法或者户外监控的时候,能够实现户外移动监控的网页无插件直播(EasyGBD在移动执法中的应用)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结