RTSP协议安防视频智能平台EasyNVR通道可生成快照却无法播放问题排查
TSINGSEE青犀视频开发的RTSP协议视频智能分析平台EasyNVR是目前市面上比较完善且稳定的视频流媒体直播分发平台。EasyNVR内接入的视频通道都可以通过平台进行网页直播,并且支持市面上大部分的RTSP/Onvif协议设备:IP Camera/NVR/DVR/编码器等。
当我们测试的时候,有时会出现EasyNVR通道在线,也能够正常生成快照,并且其他功能都是正常的,但是视频无法播放的情况。
由于其他功能正常,所以我们查看logs文件下的log日志也无法检查出原因,说明EasyNVR本身运行都很正常。
随后我们发现nginx的进程不存在了,观察日志发现到某一时间,就不打印了,这个停止打印的时间,应该就是nginx正常运行的最后时间,停止打印后,nginx进程就停止了。
发现问题所在后,我们就在EasyNVR添加了定时任务,定时去监听nginx的进程是否存在,如果不存在就重新启动nginx,以此来避免此类问题的出现。
在EasyNVR上实现该功能之前先通过以下代码实现的小工具进行分析。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | func main() { var inputStr string for { fmt.Println( "---------------------------------------------------" ) fmt.Print( "1->退出 " ) fmt.Print( "2->显示进程 " ) fmt.Print( "3->结束进程 " ) fmt.Println( "4->显示全部进程" ) fmt.Println( "---------------------------------------------------" ) fmt.Scanln(&inputStr) if inputStr == "1" { fmt.Println( "已退出..." ) break } else if inputStr == "2" { fmt.Print( "请输入进程名称:" ) var processName string fmt.Scanln(&processName) if len(processName) == 0 { fmt.Println( "进程名称不可为空!" ) } else { text := "imagename eq " + processName + "*" listProcess(text) } } else if inputStr == "3" { fmt.Print( "请输入要结束的进程名称:" ) var processName string fmt.Scanln(&processName) if len(processName) == 0 { fmt.Println( "进程名称不可为空!" ) } else { text := "imagename eq " + processName + "*" killProcess(text) } } else if inputStr == "4" { listAllProcess() } else { fmt.Println( "请输入正确的参数!" ) } } fmt.Scanln(&inputStr) } func listProcess(text string ) { fmt.Println(text) cmd := exec.Command( "tasklist" , "/fi" , text) out , err := cmd.CombinedOutput() if err != nil { log.Fatal(err) } fmt.Println( string ( out )) } func listAllProcess() { cmd := exec.Command( "tasklist" ) out , err := cmd.CombinedOutput() if err != nil { log.Fatal(err) } fmt.Println( string ( out )) } func killProcess(text string ) { cmd := exec.Command( "taskkill" , "/f" , "/t" , "/fi" , text) out , err := cmd.CombinedOutput() if err != nil { log.Fatal(err) } fmt.Println( string ( out )) } |
Windows下可以通过该方法查询nginx进程是否存在:
nginx进程不存在输出:
nginx进程存在输出:
分类:
EasyNVR
【推荐】国内首个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带你走进微服务的世界
2020-02-05 线上课堂助力疫情防控,EasyDSS教你如何打造高效的直播授课