欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-05 11:06:09
...

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

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

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

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

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

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

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

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