RTSP协议网页无插件直播平台EasyNVR视频广场无法搜索纯数字关键词的通道,该如何解决的?
最近改版的新版EasyNVR我们发现界面中仍然保留了“视频广场”的显示项,通过视频广场可以查看不同通道的最新视频快照信息,也可以通过搜索方式展现特定的视频通道快照。最近测试中研发测试时,发现在视频广场使用搜索框搜索不到纯数字的关键词。
只有在使用纯数字的关键词时才会搜索不到结果,使用其他的关键词都是可以搜索到结果的,比如英文、中文、英文+数字都可。由此可以判断不是前端的问题,而是后端的问题。
我们查看后端接口的代码。
1 2 3 4 5 6 7 8 9 10 | if form.Q != "" { q := strings.ToLower(form.Q) name := strings.ToLower(info.Name) if ch, err := strconv.Atoi(q); err == nil { if ch == int (info.Channel) { infos = append(infos, info) } } else if strings.Contains(name, q) { infos = append(infos, info) } |
问题出在strconv.Atoi(q)这个函数上,该函数的作用是将前端传过来的参数从字符串转数字,如果是数字就不会报错,随后执行下面if下的代码逻辑,导致没有数据产生,因此搜索不到数字的关键词结果。
我们将后端代码进行修改:
1 2 3 4 5 6 7 8 9 10 11 | if form.Q != "" { q := strings.ToLower(form.Q) name := strings.ToLower(info.Name) if ch, err := strconv.Atoi(q); err == nil { if ch == int (info.Channel) { infos = append(infos, info) } } if strings.Contains(name, q) { infos = append(infos, info) } |
搜索数字后将关键词进行判断,根据不同关键词执行不同的代码逻辑,此时如果通道名称和通道ID都是数字,也可以搜索到了。
此外还有一个问题,如果通道ID和通道名称相同,此时就会搜索出两条数据。
因为如果通道ID和名称都是相同的,会导致重复数据的出现,所以我们在下面代码中将通道数组转map去重即可解决。
1 2 3 4 5 6 7 8 | result := make([]*channels.ChannelInfo, 0) m := make(map[*channels.ChannelInfo] bool ) for _, v := range infos { if _, ok := m[v]; !ok { result = append(result, v) m[v] = true } } |
EasyNVR视频边缘计算网关平台是支持RTSP拉流协议的流媒体视频平台,同时能够将拉取的RTSP协议视频流转化为RTMP、FLV、HLS、RTSP等格式进行分发。目前支持市面上大部分的RTSP/Onvif协议设备、IP Camera/NVR/DVR/编码器等。如果大家想了解一些其他的方案,可以查阅我们以前的博文,此外,视频相关解决方案均可访问TSINGSEE青犀视频,可以联系我们获取演示方案,直观感受,也可自行进行下载及测试。
【推荐】国内首个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 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界