如何解决国标GB28181视频平台EasyGBS运行中端口不够用的情况?
大家知道EasyGBS视频平台有两种视频传输模式,包括TCP、UDP,可以*进行切换选择。EasyGBS运行过程中,选择TCP需要开 30000-40000端口,选择UDP需要开50000-60000的端口,有可能出现端口不够用的情况,导致程序报错。
如何解决这个问题?首先我们要明白EasyGBS的端口逻辑。目前端口使用的逻辑如下:摄像头注册上来,平台向摄像头发送推流请求,然后平台将接收流数据的端口返回给摄像头,让摄像头向这个端口发送数据。
所以经过分析,需要进行端口复用,也就是分配一个较小的端口段,然后当端口分配到达设定的最大值的时候,反过来继续重头开始查找。不过实现该功能需要注意,不能影响到现有设备的推流操作。
下面我们看下代码,实现如下:
for i := 0; i < (udpPortMax-udpPortMin)/2; i = i + 2 {
port := start + i
if port >= udpPortMax {
port = udpPortMin + (port - udpPortMax)
}
if port%2 != 0 {
break
}
注意点,端口复用的时候需要对端口可用性进行判断,以下为端口判断参考代码:
if !isUsable(dataConn, d) {
sms_log.Log.Printf("rtp udp conn port[%d] got some data within %v, ignore this port, continue find", port, d)
dataConn.Close()
continue
}
以下为实现效果,我们可以看到,端口到达设定的50010顶峰的时候,还会重新使用之前使用过的50002端口。
关于国标端口的设置,大家可以看一下《EasyGBS视频平台设备在线的情况下无法播放视频流原因分析》,里面详细介绍了下国标端口开放的要求。
EasyGBS作为国标GB28181协议接入平台,能够将GB28181设备/平台推送的PS流转成ES流,然后提供RTSP、RTMP、FLV、HLS多种格式进行分发,从而实现视频监控平台的建立。更多视频相关解决方案,均可访问TSINGSEE青犀视频,欢迎联系我们获取演示方案,直观感受,也可自行进行下载及测试。
上一篇: 选择性搜索 Selective Search -- 算法详解+源码分析
下一篇: 判断是否是空文件夹