网关程序介绍

网关主控程序与转码推流程序

网关主控程序路径:/opt/WebConfig/mastercontrolserver/mastercontrolserver-0.0.1.jar

转码推流程序路径:/home/QMCY/AGWS/QMCY

一键运行程序命令:cd /opt && ./start_env.sh

查看运行情况:

tmux复用终端运行情况:tmux ls

root@ubuntu:~# tmux ls
MASTER: 1 windows (created Mon Sep 22 10:22:57 2025)
QMCY: 1 windows (created Mon Sep 22 10:22:57 2025)

主控程序运行查看:ps -ef | grep -Ei "guard|mastercontrolserver" | grep -v grep

root@ubuntu:~# ps -ef | grep -Ei "guard|mastercontrolserver" | grep -v grep
root      321339  321156  0 10:23 pts/1    00:00:01 /bin/sh ./guard_master.sh
root      321361  321339  1 10:23 pts/1    00:04:23 java -jar mastercontrolserver-0.0.1.jar --spring.config.location=./application.properties

转码推流程序运行查看:ps -ef | grep "./QMCY" | grep -v grep

root@ubuntu:~# ps -ef | grep "./QMCY" | grep -v grep
root      321327  321161 99 10:22 pts/2    23:21:12 ./QMCY

网关配置中心平台

登录页面 输入用户名、密码和验证码登录

网关配置中心首页 网关配置中心左侧为地区分类栏,中间为录入网关配置中心的网关单元

创建网关单元 点击新增网关

填入设备名称、IP地址和运行主控程序的端口号

网关单元

网关单元首页面板信息有设备名称、CPU占用率、内存占用率、网关所属地区、访问地址、注册摄像机数、有效日期、当前的转码推流程序和主控程序版本号

点击进入网关单元,可查看摄像机列表,此界面控制网关数据库摄像机信息的新增、修改和删除,上云平台的摄像机注册上报与取消注册上报(删除已注册的视频点位)

平台管理

视频上云平台与上云网关的互相访问 上云平台与上云网关采用OAuth 2.0互相认证

上云平台访问上云网关:如下发切换高清4M码流推流指令、下发128K长推流指令

上云网关访问上云平台:新增/修改/删除上报摄像机信息、主动获取推流地址并推流

平台管理页面

设置网关要上报的视频上云平台,展示信息:平台名称、云平台地址、平台编号、平台User、平台Token、平台密钥、网关编号、网关User、网关Token、网关密钥

新增上云平台信息

点击新增平台,编辑云平台必填信息:平台名称、云平台地址、平台编号、平台User、平台Token、平台私钥。

点击确定后,网关会生成自己的网关。

可在网关配置中心首页的网关单元导出网关授权信息为excel表格

网关摄像机信息管理

新增/修改摄像机信息

分为单条新增与批量新增,推荐使用批量新增功能,此功能可代替批量修改摄像机的功能

批量新增需上传xlsx或xls格式的文件

上云网关所需的摄像机信息信息如下

字段名称值域
通道号内容与子码流播放地址相同
管辖单位如:广东省高速公路有限公司京珠北分公司
摄像机编号采用UUID4规则,如:aef89ecc-4cc6-4a6d-80fd-283196105b0b
摄像机名称G4(京港澳高速)京珠北路段广东省韶关市广东省高速公路有限公司
京珠北分公司K1844+158(粤北收费站)
经纬度格式:经度/纬度,如:130.34567/29.346587
摄像机所在路线(编号)如G4
摄像机位置类型0:默认
1:道路沿线
2:桥梁
3:隧道
4:收费广场
5:收费站
6:服务区
7:ETC门架
8:移动视频源
摄像机方向0:上行
1:下行
2:双向
摄像机桩号请严格按照如下格式:K100+100
行政区划代码采用最新的民政部行政区划代码标准(到区县级),如411528
摄像机所属路段例如:京珠北段
摄像机类型1:监控型枪机
2:监控型球机
3:全景型
4:抓拍型
视频上云网关编号平台线下下发,如ZM1200202005290008
兴趣点名称道路摄像机上传道路名称
如“京沪高速道路”
如“苏通大桥”
如“九华山隧道”
如:“马群收费站”等
其他参数扩展预留字段,如果该点位通过IPCamera方式取流,该字段填写IP
子码流通道子码流RTSP协议取流地址,如:rtsp://…
主码流通道主码流RTSP协议取流地址,如:rtsp://…
主码流通道转码通常填1
子码流通道转码通常填1
云控类型:SDK、国标、onvifonvif/国标:gb/sdk
接入网关/NVR国标ID接入网关/NVR国标ID
相机国标ID相机国标ID
相机品牌海康:hk/宇视:ys
云台控制ip云台控制ip
云台控制用户名云台控制用户名
云台控制密码云台控制密码
云台控制端口云台控制端口

:::warning 注意事项:管辖单位(department)值与摄像机所属路段(roadSec)值需要和云平台的组织名称一致。

:::

删除摄像机信息 可删除单个摄像机、也可勾选多路摄像机批量删除

网关上报摄像机信息至云平台 支持勾选多路摄像机上报也可一键全部上报。接收数据上报方提供的摄像机列表信息,如果摄像机存在则对信息进行修改,否则新增。

平台接收的数据信息

数据元名称参数名值域必填
1摄像机所属单位名称department
2摄像机编号cameraNum采用 UUID4 规则
3摄像机名称cameraName
4摄像机经度、纬度longAndLati格式:经度/纬度;如: 130.34567/29.346587
5摄像机所在路线roadG42&S38
6摄像机位置类型classify0:默认;1:道路沿线;2:桥梁;3:隧道; 4:收费广场5:收费站 6: 服务区; 7 :ETC 门架;8:移动视频源;
7摄像机方向cameraOrientation0:上行(桩号数字由小到大方向) 1 :下行(桩号数字由大到小方 向)2:上下行(双向)
8摄像机桩号pileNum格式: K100+100
9行政区划代码area采用最新的民政部行政区划代码标准
10摄像机所在路段roadSec例如:宁镇管理处
11摄像机类型cameraType1:监控型枪机2:监控型球机3:全景型4:抓拍型
12视频上云网关编号gatewayNum“路段-部机云平台”对接方式时使用,该值由平台提供
13其他参数others扩展预留字段

:::warning 注意事项:管辖单位(department)值与摄像机所属路段(roadSec)值需要和云平台的组织名称一致。

:::

网关删除上报摄像机信息至云平台

支持勾选多路摄像机取消上报也可一键全部取消上报,也可直接删除摄像机信息自动触发向云平台取消上报摄像机信息

视频点位离线原因排查

全部离线

  1. 查看服务器IP,默认网关,公网IP是否正常
  2. 路由和推流域名检查
  3. 转码推流程序内部运行情况查看

查看服务器IP、默认网关、公网连接是否正常

使用ifconfigip addr show查看服务器的网口情况与IP情况,排除IP异常或网口状态异常。

使用route -n查看默认网关,必要时编辑配置文件/etc/netplan/00-installer-config.yaml修复异常

公网连接检测,使用ping、traceroute、nmap检测

路由和推流域名检查

下级摄像机或流媒体的服务器IP的路由丢失,编写/etc/netplan/00-installer-config.yaml并执行netplan apply生成永久路由不丢失

利用traceroutemtr工具检测CDN推流节点的丢包位置

root@ubuntu:~# mtr -rn -c 30 jsgs-push.jchc.cn
Start: 2025-09-22T16:27:54+0800
HOST: JS-ninghu-nanbutongdao-spsy Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- ???                       100.0    30    0.0   0.0   0.0   0.0   0.0
  2.|-- 10.137.255.33              0.0%    30    0.2   0.2   0.1   0.4   0.0
  3.|-- 223.112.147.209            0.0%    30    1.5   2.0   1.5   3.3   0.5
  4.|-- 218.206.108.205            0.0%    30    2.6   2.7   2.3   3.9   0.4
  5.|-- ???                       100.0    30    0.0   0.0   0.0   0.0   0.0
  6.|-- ???                       100.0    30    0.0   0.0   0.0   0.0   0.0
  7.|-- 221.183.58.70             40.0%    30   14.8  15.0  14.8  15.8   0.3
  8.|-- 111.6.222.254              0.0%    30   19.7  20.0  19.6  21.2   0.4
  9.|-- 111.7.184.18              53.3%    30   20.0  19.9  19.8  20.4   0.2
 10.|-- ???                       100.0    30    0.0   0.0   0.0   0.0   0.0
 11.|-- ???                       100.0    30    0.0   0.0   0.0   0.0   0.0
 12.|-- 111.6.234.248              0.0%    30   21.4  21.0  20.7  21.9   0.3

主控程序日志查看与转码推流程序内部运行情况查看

主控程序日志路径:/opt/WebConfig/mastercontrolserver/logs/mastercontrolserver/mastercontrolserver_info.log

转码推流程序日志路径:/home/QMCY/AGWS/log/status.log

转码程序状态详情接口:. /home/QMCY/AGWS/status.sh

部分离线

  1. 推流域名检查
  2. 都是同一网段检查路由是否丢失,添加路由
  3. 精细化排查——如何用脚本检查摄像机IP和摄像机拉流地址,对应的返回结果情况枚举说明

推流域名检查

同上

都是同一网段检查路由是否丢失,添加路由

同上

精细化排查——如何用脚本检查摄像机IP和摄像机拉流地址,对应的返回结果情况枚举说明

批量检测IP脚本,检测ping大包丢包率

#!/bin/bash
#多线程同时ping主机IP地址:
> ping_result.log
 
pingduoduo(){
    local ip=$1
    # ping 15次,间隔1秒,超时1秒,包大小16000字节
    local loss=$(ping -c15 -i1 -W1 -s16000 "$ip" | grep "packet loss" | awk -F 'received, ' '{print $2}' | awk -F ' packet loss' '{print $1}')
    echo "$ip packet loss:$loss" >> ping_result.log
}
main(){
    # 读取ip_hosts文件的每一行,作为IP地址
    for i in $(cat ip_hosts); do
        pingduoduo "$i" &
    done
    # 等待所有后台任务完成
    wait
    cat ping_result.log
}
# 调用主函数执行
main
root@JS-yanjiang-spsygw-10-105-159-4:/opt/ping_ips# cat ip_hosts 
10.131.9.27
10.131.8.27
10.131.7.5
10.105.14.70
10.105.14.71
10.105.14.75
10.105.13.182
root@JS-yanjiang-spsygw-10-105-159-4:/opt/ping_ips# ./ping_ips.sh 
10.131.8.27 packet loss:0%
10.131.9.27 packet loss:0%
10.131.7.5 packet loss:0%
10.105.14.70 packet loss:93.3333%
10.105.14.75 packet loss:100%
10.105.14.71 packet loss:100%
10.105.13.182 packet loss:100%
 

批量检测摄像机RTSP取流地址

#!/bin/bash
 
# 定义文件名称
RTSP_FILE="rtspAddress.txt"
OUTPUT_FILE="output.txt"
# 清空output.txt文件
: > "$OUTPUT_FILE"
 
check_ffmpeg() {
    # 检查ffmpeg是否已安装
    if ! which ffmpeg >/dev/null 2>&1; then
        echo "未检测到ffmpeg,请安装ffmpeg静态构建版"
        echo "ffmpeg静态构建版下载: wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz"
    fi
}
 
 
run_ffmpeg_test() {
    rtsp="$1"
    # 运行ffmpeg
    video_info=`ffmpeg -timeout 5000000 -i "$rtsp" 2>&1`
 
    # 用case判断video_info中的多种情况
    case $video_info in
        # 如果包含“failed:”,则拉流失败,获取失败原因
        *failed:*)
            result=`echo "$video_info" | grep "failed: " | awk -F': ' '{print$NF}'`
	          echo "$rtsp failed, $result"
            echo "$rtsp failed, $result" >> "$OUTPUT_FILE"
            ;;
 
        # 如果包含"Video:",说明有该rtsp流地址可用,打印分辨率和编码格式信息
        *Video:*)
        # 提取编码格式
            encoding=`echo "$video_info" | grep "Video: " | awk '{print $4}' | awk '{print $1}'`
            # 提取分辨率
            width=`echo "$video_info" | grep "Video:" | awk -F 'x' '{print$1}' | awk -F ', ' '{print $NF}'`
            height=`echo "$video_info" | grep "Video:" | awk -F 'x' '{print$2}' | awk -F ', ' '{print $1}'`
            # 输出结果到output.txt文件
            echo "$rtsp succeed, encoding: ${encoding}, resolution: ${width}x${height}"
            echo "$rtsp succeed, encoding: ${encoding}, resolution: ${width}x${height}" >> "$OUTPUT_FILE"
            ;;
 
        # 如果以上情况都不包含,则输出最后一个": "后面的内容
        *)
            result=`echo "$video_info" | grep -n ': ' | tail -n1 | awk -F ": " '{print $NF}'`
            echo "$rtsp failed, $result"
            echo "$rtsp failed, $result" >> "$OUTPUT_FILE"
            ;;
    esac
}
 
main() {
    check_ffmpeg
    for i in $(cat $RTSP_FILE); do
        run_ffmpeg_test "$i"
    done
    wait
    printf "脚本运行结束,请打开%s查看运行结果\n" "$OUTPUT_FILE"
}
 
# 运行主程序
main
root@JS-yanjiang-spsygw-10-105-159-4:/opt/test-RTSP-stream2.0# cat rtspAddress.txt 
rtsp://admin:Dnzn_sz_2025@10.131.8.7:554/Streaming/Channels/102
rtsp://admin:YJgs@ETC168@10.105.13.176:554/Streaming/Channels/102
rtsp://admin:YJgs@ETC168@10.105.13.178:554/Streaming/Channels/102
root@JS-yanjiang-spsygw-10-105-159-4:/opt/test-RTSP-stream2.0# ./testRTSPstream.sh 
rtsp://admin:Dnzn_sz_2025@10.131.8.7:554/Streaming/Channels/102 succeed, encoding: h264, resolution: 704x576
rtsp://admin:YJgs@ETC168@10.105.13.176:554/Streaming/Channels/102 failed, Connection timed out
rtsp://admin:YJgs@ETC168@10.105.13.178:554/Streaming/Channels/102 failed, 401 Unauthorized
脚本运行结束,请打开output.txt查看运行结果

ffmpeg播放RTSP协议流媒体地址返回信息枚举表好的,这是根据您提供的信息总结的RTSP连接常见错误及原因表格:

错误信息可能原因解决建议
Connection timed out网络IP不通、端口不通或目标主机的RTSP服务完全无响应。检查IP地址、端口号、网络连通性、防火墙以及目标服务是否启动。
Connection refused目标主机已收到请求,但明确拒绝连接该RTSP服务端口。确认端口号是否正确、目标主机防火墙规则是否放行、服务是否仅监听本地地址。
401 Unauthenticated鉴权失败。用户名或密码不正确;或多次尝试失败导致源IP被临时锁定。核对登录凭证,等待锁定解除,或检查服务器鉴权配置。
5XX Server Error服务器内部错误。常见原因是RTSP服务的最大连接数被占满(如多个设备同时在取流)。减少并发取流数,或增加服务器/设备允许的最大连接数限制。
404 Not Found连接已建立,但请求的媒体流路径(URL)不存在或该通道无视频流。检查RTSP URL路径(如/Channels/102)对应序号码流和通道号是否开启。
Invalid data found…与404类似,表示能连接到服务但请求不到有效的视频流数据,导致FFmpeg超时中断。确认通道是否存在、是否有视频信号、以及URL格式是否正确。