国标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,欢迎联系我们获取测试账号进行测试。