国标视频云服务平台EasyGBS可支持通过国标GB28181协议接入多路视频源设备,实现视频流的接入、转码、处理与分发等功能,对外输出的视频流格式包括RTSP、RTMP、FLV、HLS、WebRTC等。平台视频能力丰富灵活,包括监控直播、视频分发、录像、回看与检索、云存储、语音对讲、告警上报、云台控制、平台级联等,可应用在多种场景中,如明厨亮灶、平安乡村、雪亮工程、智慧工地等。

EasyGBS对接宇视使用TCP传输崩溃该如何解决? _数据

有用户反馈,在现场EasyGBS对接宇视设备时,下级平台往上级平台推流,上级EasyGBS进行播放会出现崩溃现象。部分错误码如下:

“runtime: unexpected return pc for gitee.com/easydarwin/EasyGBSGo/global.LoadTop.func1 called from 0xc001ac6000”

EasyGBS对接宇视使用TCP传输崩溃该如何解决? _视频流_02

为提高用户体验,优化平台功能,技术人员立即开展分析排查。

从上述错误码中分析得出是GO运行时报错。调试如下代码注释,程序运行几天未出现崩溃现象。-

EasyGBS对接宇视使用TCP传输崩溃该如何解决? _视频流_03

EasyGBS对接宇视使用TCP传输崩溃该如何解决? _缓存_04

此代码是发送tcp和udp流给上级播放,所以再进行拆分查看哪个会出现崩溃。最后测试发现,是tcp播放会出现崩溃现象,而udp播放未出现崩溃现象。

由此推算是tcp的缓存问题。在使用go的bufio.ReadWriter作为缓存发送tcp数据,再运行一会还是会出现崩溃现象。

最终不使用go的tcp库发送数据,而是直接改成C的方式发送,并在go中使用cgo,这样即可解决崩溃问题。

解决方法如下:

使用C的方式发送tcp数据,在go中使用。参考代码如下:

  • 建立tcp连接:

EasyGBS对接宇视使用TCP传输崩溃该如何解决? _缓存_05

  • 发送tcp数据:

EasyGBS对接宇视使用TCP传输崩溃该如何解决? _视频流_06

  • 关闭tcp连接:

EasyGBS对接宇视使用TCP传输崩溃该如何解决? _缓存_07

EasyGBS平台部署轻快、可拓展性强,我们也提供了丰富的API接口与SDK服务,用户可根据自己的需求自由调用、二次开发与集成,能轻松搭建安防视频监控平台。大家如果感兴趣,可以前往演示平台进行体验或部署测试。