国标GB28181协议视频智能分析/告警上报平台EasyGBS在线观看人数显示错误排查过程

TSINGSEE青犀视频研发团队一直致力于视频解决方案的开发,包括视频流媒体智能分析平台、网络穿透及推流产品、H265视频播放器等,其中视频智能分析平台则是作为视频能力层,提供视频流的接入、转码、分发等功能,如EasyGBS、EasyNVR等视频智能分析平台,不受限于观看人数,使用便捷,设置简单,适用范围也很广泛。

EasyGBS视频智能分析平台内,视频通道实时显示在线观看人数,然而近期发现当通道有人在播放的时候,在线人数显示仍为0。

该处问题我们考虑是由于后端代码获取值不匹配造成的,因此检查了代码,发现在nginx中提供的http接口返回在线人数一直不对,获取到的始终是0,因此前端显示始终为0。

gsessions := gjson.GetBytes(body,
 "EasyDarwin.Body.Sessions.Sessions")
	if !gsessions.IsArray() {
		return
	}
	for _, v := range gsessions.Array() {
		if !v.IsObject() {
			continue
		}
		id := v.Get("Id").String()
		app := v.Get("Application").String()
		key := GetCacheKey(app, id)
		var hlsNumOutputs int64
		var hlsOutBytes int64
		if _hlsData, ok := HLSCache.Get(key); ok {
			if hlsData, ok := _hlsData.(*HLSCacheData); ok {
				hlsNumOutputs = hlsData.NumOutputs
				hlsOutBytes = hlsData.OutBytes
			}
		}
		sessions = append(sessions, &SessionInfo{
			ID:            id,
			Application:   app,
			HLS:           v.Get("HLS").String(),
			FLV:           v.Get("HTTP-FLV").String(),
			RTMP:          v.Get("RTMP").String(),
			Time:          v.Get("Time").String(),
			NumOutputs:    v.Get("NumOutputs").Int() + hlsNumOutputs,

通过调试代码发现nginx返回字段中应该是EasyDSS,而非EasyDarwin。TSINGSEE青犀视频云边端架构产品几乎都是基于EasyDSS搭建的,因此此处应该为EasyDSS才能正常显示。

修改代码如下:

gsessions := gjson.GetBytes(body,
 "EasyDSS.Body.Sessions.Sessions")
	if !gsessions.IsArray() {
		return
	}
	for _, v := range gsessions.Array() {
		if !v.IsObject() {
			continue
		}
		id := v.Get("Id").String()
		app := v.Get("Application").String()
		key := GetCacheKey(app, id)
		var hlsNumOutputs int64
		var hlsOutBytes int64
		if _hlsData, ok := HLSCache.Get(key); ok {
			if hlsData, ok := _hlsData.(*HLSCacheData); ok {
				hlsNumOutputs = hlsData.NumOutputs
				hlsOutBytes = hlsData.OutBytes
			}
		}
		sessions = append(sessions, &SessionInfo{
			ID:            id,
			Application:   app,
			HLS:           v.Get("HLS").String(),
			FLV:           v.Get("HTTP-FLV").String(),
			RTMP:          v.Get("RTMP").String(),
			Time:          v.Get("Time").String(),
			NumOutputs:    v.Get("NumOutputs").Int() + hlsNumOutputs,


再次播放,前端页面则展示正常。

本文我们讲到了EasyDSS,所以结尾处提一下,EasyDSS也是TSINGSEE青犀视频研发的一个独立的视频直播点播平台,在教育培训或者远程医疗上发挥了重要作用,如果大家想要了解EasyGBS或者EasyDSS,欢迎联系我们获取测试账号进行测试。

posted on 2020-12-02 17:09  EasyGBS  阅读(84)  评论(0编辑  收藏  举报