如何解决国标GB28181视频平台EasyGBS运行中端口不够用的情况?

大家知道EasyGBS视频平台有两种视频传输模式,包括TCP、UDP,可以自由进行切换选择。EasyGBS运行过程中,选择TCP需要开 30000-40000端口,选择UDP需要开50000-60000的端口,有可能出现端口不够用的情况,导致程序报错。

189.png

如何解决这个问题?首先我们要明白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端口。

190.png

191.png

关于国标端口的设置,大家可以看一下《EasyGBS视频平台设备在线的情况下无法播放视频流原因分析》,里面详细介绍了下国标端口开放的要求。

GBS4.png

EasyGBS作为国标GB28181协议接入平台,能够将GB28181设备/平台推送的PS流转成ES流,然后提供RTSP、RTMP、FLV、HLS多种格式进行分发,从而实现视频监控平台的建立。更多视频相关解决方案,均可访问TSINGSEE青犀视频,欢迎联系我们获取演示方案,直观感受,也可自行进行下载及测试。

猜你喜欢

转载自blog.csdn.net/EasyGBS/article/details/108489162