河南视频网关运维之Linux篇

准备工作

1. 加入微盘

登录企业微信,收到邀请进入微盘,微盘-共享-视频事业部-运维组,这里是部门运维组整理的所有工作相关文件,可随时上传、下载、更新文件,方便小伙伴们跨平台、跨设备的实时处理工作内容与文件。

2. 获取服务器远程信息

视频转码上云网关在河南的各个路公司处,将ssh服务端口映射到公网后方可ssh远程。

远程信息已保存在微盘中:视频事业部-运维-河南-网关-河南网关远程信息表.xlsx。这里推荐使用xshell作为远程连接工具,可酌情保存一份远程配置文件在xshell上随时远程使用。

image-20240501142120086

3. 获取运维的摄像机信息

网关上都安装了mysql数据库,登录网关配置中心可以找到对应的路公司网关,从网关配置中心导入摄像机信息表,再由网关的主控程序处理数据同步网关数据库。

已经导入的摄像机数据我们备份在了微盘,路径为:视频事业部-运维-河南-网关-河南高速公路公司-路段单位,另外还包含了路由信息和网卡信息。

路由信息:设置摄像机IP的网络段自定义指向一个网关路由,若不可抗因素导致路由信息丢失,则摄像机与转码上云网关链路断开,拉流取不到视频流。

网卡信息:记录了静态内网地址。若外网网络不通,可进入路公司内网后通过内网地址远程转码网关。

1. 主控程序

作用:为高速公路视频云联网平台提供对接服务,接受并处理在云平台上的标清下发推流请求和高清点播请求,将请求传递给转码程序处理

文件所在路径:/opt/WebConfig/mastercontrolserver

寻找运行路径:cd "$(pwdx $(pgrep -f 'java -jar') | awk '{print $2}')"&&ls

运行日志路径:/opt/WebConfig/mastercontrolserver/logs/mastercontrolserver/

内含三个日志等级:info、warn和error

2. 转码程序

作用:拉流、转码、推流

有的转码程序版本将标清和高清的转码工作分开,标清通过GPU专用转码卡转码,高清用CPU进行转码。

2.1. 标清转码

作用:调用GPU,为标清视频提供长推流服务

文件所在路径:/opt/runGWS

运行日志同上,做了100份日志文件轮询,当前运行日志的文件是GWS.log

寻找运行路径:cd "$(pwdx $(pgrep -f './GWS') | awk '{print $2}')"&&ls

2.2. 高清转码

作用:调用CPU,为高清视频提供点播推流服务

文件所在路径:/opt/runGWS_CPU

运行日志同上,做了100份日志文件轮询,当前运行日志的文件是GWS.log

3. 守护进程

主要任务是保证每台网关的三个程序正常运行:

  • 主控程序 mastercontrolserver
  • 转码程序 GWS
  • 高清转码 HDCPU

为避免程序崩溃后转码停止服务,我们设置了三个守护进程来复启动转码服务,从而达到自动化运维的目的。分别是 guard_master.shguard_hik.shguard_cpu.sh

查看进程:

1
2
3
4
5
6
7
8
ps -ef | grep -e 'guard' -e 'java -jar' -e './GWS' | grep -v grep
root@hn-zhongyuan-suixian-spsygw-000001:~# ps -ef | grep -e 'guard' -e 'java -jar' -e './GWS' | grep -v grep
root 2929 2896 0 2023 pts/2 00:06:41 /bin/sh ./guard_hik.sh
root 3105 3081 0 2023 pts/3 01:37:56 /bin/sh ./guard_master.sh
root 25108 25068 0 2023 pts/1 00:06:36 /bin/sh ./guard_cpu.sh
root 31805 3105 1 12:50 pts/3 00:00:56 java -jar mastercontrolserver-0.0.1.jar --spring.config.location=./application.properties
root 31878 2929 99 12:50 pts/2 01:46:01 ./GWS -a 2 -c 0 -p 0 -nl -pl -hbst 1800

4. Tmux终端复用工具

守护进程最好使用tmux打开窗口复用终端运行

查看已创建tmux窗口名称:

1
2
3
4
5
tmux ls
root@hn-zhongyuan-suixian-spsygw-000001:~# tmux ls
GWS: 1 windows (created Fri Oct 20 08:05:22 2023) [205x35]
HDCPU: 1 windows (created Mon Oct 23 03:40:56 2023) [142x43]
MASTER: 1 windows (created Fri Oct 20 08:06:53 2023) [205x35]

创建窗口,执行后自动进入复用终端

1
tmux new -s ‘窗口名称’

如:tmux new -s MASTER

进入终端后运行守护进程

1
2
cd /opt/WebConfig/mastercontrolserver
./guard_master.sh

退出窗口:第一步按下 ctrl + b 第二步 按下 d(注意是小写)

进入已创建窗口:tmux attach -t MASTER,或 tmux a -t MASTER

创建窗口并进入 tmux new -s GWS

1
2
cd /opt/runGWS
./guard_hik.sh

进入复用窗口 tmux a -t HDCPU

重启主控和GWS,等待出现GWS可在平台下发推流

1
2
3
4
5
6
7
{
cd "$(pwdx$(pgrep -f './GWS') | awk '{print $2}')"
pkill -ef 'java -jar' && pkill -ef './GWS'
pkill -ef 'java -jar' && pkill -ef './GWS'
ps -ef | grep -e 'java -jar' -e './GWS' | grep -v grep
tail -f GWS.log
}

5. 其他

5.5 开机自启设置(非常重要)

开机自启脚本写在 /etc/rc.local/opt/start_env.sh,由 /etc/rc.local 运行 /opt/start_env.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
root@ubuntu_yudeng:/opt# cat start_env.sh 
#!/bin/bash
sudo timedatectl set-timezone 'Asia/Shanghai'
ifconfig enp7s0 44.129.35.100/24
cd /home/GWS-deploy-hik/package/install/Hik/ko
sh load_ko.sh

cd /opt/runGWS
rm -f GWS.log* error.log nohup.out
chmod 777 guard_hik.sh
./guard_hik.sh &

cd /opt/runGWS_CPU
rm -f GWS.log* error.log nohup.out
chmod 777 guard_cpu.sh
./guard_cpu.sh &

cd /opt/runGWS_CPU_CIF
rm -f GWS.log* error.log nohup.out
chmod 777 guard_cpu_cif.sh
./guard_cpu_cif.sh &

cd /opt/WebConfig/mastercontrolserver
rm -rf *.log mastercontrolserver-0.0.1.out logs/
chmod 777 guard_master.sh
./guard_master.sh &
cd /opt/

exit 0

5.6 定时任务可选设置

查看已设置定时任务:

1
crontab -l

编辑定时任务:

1
crontab -e
1
2
3
4
5
6
7
8
9
# 每日凌晨3点50分杀掉转码程序,由守护进程重启程序
50 3 * * * "pkill -f 'java -jar' && pkill -f './GWS'"

# 产生的大日志文件定时清理
0 1 * * * truncate -s 0 /opt/runGWS_CPU_CIF/error.log

# 定时删除/mydata/corefile/var/lib/apport/coredump/*
0 0 */2 * * cd /opt/check_脚本 && sh check_memory.sh

5.7 批量工具使用

小工具:批量ping IP、批量测试拉流地址

微盘下的 tool/ping.tar.gztest_url.tar.gz,建议解压到 /opt

批量ping的使用

编辑待测IP写入 ip_hosts,运行 ./ping_duplicate.sh,生成 ping_error.logping_ok.log

test_url 的使用

使用前安装 ffmpeg

1
sudo apt-get install ffmpeg -y

编辑待测地址写入 rtsp_urls.txt,后台运行 ./test_resolutions.sh &,输出结果在 output.txttail -100f output.txt 滚动查看测试结果

1
2
3
4
root@hunan-changde-spsygw-005002:/opt/test_url# tail -f output.txt 
Resolution for rtsp://43.0.107.58:554/mgc/realplay/43.0.107.58:655/dac/realplay/97cb725c3e344c75874fd4455275138e/SUB/TCP?streamform=rtp&standard=rtsp:704x576, Codec: H264
Resolution for rtsp://43.0.107.58:554/mgc/realplay/43.0.107.58:655/dac/realplay/2d2eebf0cd764841b783e6f26f0444cd/SUB/TCP?streamform=rtp&standard=rtsp:704x576, Codec: hevc
Failed to get resolution and codec for rtsp://43.0.107.58:554/mgc/realplay/43.0.107.58:655/dac/realplay/b35b6aa517384aaebc35cca5679e415d/SUB/TCP?streamform=rtp&standard=rtsp

GWS.log查看

某一路推流成功

1
[2024-04-17 14:33:53.392][INFO]***Push frame success,cam_id = rtsp://43.4.5.2:50554/live/018d5920-5f29-744a-a307-10b4055b0bbc,url: rtmp://push.hngsspy.com:1935/live/018d5920-5f29-744a-a307-10b4055b0bbc?txSecret=d12e651ebdb28451d382d034c283f0d8&txTime=66200017. size: 3943, 0x27 0x64.[func:SendFrame -> RTMPusherEntity.cc:1524]

转码程序拉不到流

1
[2024-04-17 14:37:21.732][ERROR]QMCY_FFMPEG_DEMUX::QMCY_FFMPEG_Start Couldn't open input stream. cam_id = rtsp://43.4.5.2:50554/live/018d5920-5f29-7ee5-9352-afa29b1869b4[func:QMCY_FFMPEG_Start -> QMCY_FFMPEG_DEMUX.cpp:275]

可能推流失败

1
[2024-04-17 14:30:49.032][INFO]Reconnect the rtmp server, go to buffer, cam id = rtsp://43.4.5.2:50554/live/018d5920-5f29-757c-87f5-7b06163af922, url: rtmp://push.hngsspy.com:1935/live/018d5920-5f29-757c-87f5-7b06163af922?txSecret=a44d5105a3002725d8a7b931b41eb077&txTime=6620BD6F.[func:run -> RTMPusherEntity.cc:1742]

查看推流个数

grep "PushCount" GWS.logtail -300f GWS.log | grep "PushCount"

1
2
root@hunan-changde-spsygw-005002:/opt/GWS2.5.3.1# tail -300f GWS.log | grep "PushCount"
[2024-04-17 14:36:53.767][WARN]## StreamListSize:191 HeartCount:0 AccessCount:161 TransCount:161 PushCount:161 ##

StreamListSize:下发推流指令的路数
HeartCount:正在点播的高清路数
AccessCount:当前拉流路数
TransCount:当前转码路数
PushCount:当前推流路数


河南视频网关运维之Linux篇
https://tttrove.top/202404/河南视频网关运维之Linux篇/
作者
tttrove
发布于
2024年4月30日
许可协议