前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >视频监控平台EasyGBS设备播放断流现象的排查分析及解决

视频监控平台EasyGBS设备播放断流现象的排查分析及解决

原创
作者头像
TSINGSEE青犀视频
发布2022-10-21 17:10:42
7810
发布2022-10-21 17:10:42
举报
文章被收录于专栏:TSINGSEE青犀视频TSINGSEE青犀视频

EasyGBS平台基于国标GB28181协议,支持多路设备接入,并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等多种格式的视频流。平台可为大数据等综合性监管平台提供极强的视频能力,已经在大量的项目中落地应用,如明厨亮灶、平安乡村、雪亮工程等。

有用户反馈,在EasyGBS运行时,接入的设备刚开始可以正常播放,开启云端录像后,也没有停止和重播的操作,但是出现了视频流断流的现象。

技术人员立即对该反馈进行了抓包分析,排查得出是程序向设备发送了停止推流的请求。

但是此时设备的状态确实处于正在播放的状态,如图:

于是排查代码发现,当设备网络较差时,设备会断流,超过指定的时间30s(EasyGBS平台默认值),就会主动清除流媒体服务,但是redis中的流数据还在,而当设备在录像时,自动保活会从redis中取保活流数据,所以就会出现设备状态显示正在播放,但是流已经消失的情况。

解决方法如下:

在设备进行播放保活时,对流信息进行判断,添加一个最后的处理流时间,如果超过指定时间就自动重新拉流。

代码语言:javascript
复制
if stream != nil {
		latestGetFrameTime := stream.LatestGetFrameTime
		if latestGetFrameTime != "" {
			lastStreamTime, err := time.ParseInLocation("2006-01-02 15:04:05", latestGetFrameTime, time.Local)
			if err != nil {
				log.Printf("stop stream [%s] lastStreamTime %s err [%s]", streamid, latestGetFrameTime, err.Error())
				StreamStop(streamid)
				stream = nil
			}
			d := time.Since(lastStreamTime)
			if int(d.Seconds()) >= 60 {
				log.Printf("stop stream [%s] lastStreamTime %s", streamid, latestGetFrameTime)
				StreamStop(streamid)
				stream = nil
			}
		}
	}

按照上述方法修改过后,录像及播放都恢复正常了。

国标视频云服务EasyGBS可提供流媒体接入、处理、转发等服务,支持内网、公网的监控设备通过国标GB/T28181协议进行视频监控直播。平台可实现的视频能力有:实时直播、视频录像、语音对讲、云存储、检索及回放、告警、级联等。感兴趣的用户可以前往演示平台进行体验或部署测试。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档