部署wvp和zlm
-
一、准备阶段
-
1.工具准备
##服务端如果没有ssh,执行下面命令 sudo apt update sudo apt upgrade sudo apt install openssh-server ufw disable ##卸载预装的redis sudo apt remove redis-server ## 开干 ## 最好用root登录 su root ##输入密码后继续 sudo apt update ## 编译工具 sudo apt install -y git openjdk-11-jdk tar vim cmake gcc g++ libsrtp2-dev libssl-dev maven npm ##如果报错,请分开安装================================= # 安装git,用于版本控制和代码管理 sudo apt install -y git # 安装OpenJDK 11 JDK,用于Java开发 sudo apt install -y openjdk-11-jdk # 安装tar,用于文件打包和压缩 sudo apt install -y tar # 安装vim,文本编辑器 sudo apt install -y vim # 安装cmake,用于跨平台的自动化建构系统 sudo apt install -y cmake # 安装gcc,GNU编译器集合,用于编译C程序 sudo apt install -y gcc # 安装g++,GNU编译器集合,用于编译C++程序 sudo apt install -y g++ # 安装libsrtp2-dev,用于实时传输协议的开发库 sudo apt install -y libsrtp2-dev # 安装libssl-dev,用于SSL加密的开发库 sudo apt install -y libssl-dev # 安装maven,Java项目管理和综合工具 sudo apt install -y maven # 安装npm,Node.js的包管理器 sudo apt install -y npm ##如果报错,请分开安装=======================结束========== ## ffmepg ## Fmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,检查是否成功安装ffmpeg -version sudo apt install ffmpeg
-
maven编译安装(可省略)
wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz mkdir app tar xf apache-maven-3.9.4-bin.tar.gz mv apache-maven-3.9.4 app/maven echo "export PATH=~/app/maven/bin:\$PATH" >> ~/.bashrc ## 环境变量生效 source ~/.bashrc
-
安装nodejs(可省略)
wget https://nodejs.org/dist/v16.19.0/node-v16.19.0-linux-x64.tar.gz tar xf node-v16.19.0-linux-x64.tar.gz mv node-v16.19.0-linux-x64 app/node echo "export PATH=~/app/node/bin:\$PATH" >> ~/.bashrc ## 环境变量生效 source ~/.bashrc
-
2.数据库准备(可用宝塔面板都搞好)
-
安装数据库
sudo apt update sudo apt install mysql-server-5.7 sudo systemctl status mysql
-
初始化数据库
-
方法一:命令安装
创建一个新的数据库名wvp和账户wvp,密码12345678
-
sudo mysql -u root -p
sudo mysql -u root -p
CREATE USER 'wvp'@'localhost' IDENTIFIED BY '12345678';
GRANT ALL PRIVILEGES ON wvp.* TO 'wvp'@'localhost';
FLUSH PRIVILEGES;
```
-
导入初始化数据
-
导入"初始化-mysql.sql" 到wvp数据库里面
-
mysql -u wvp -p12345678 wvp < /path/to/初始化-mysql.sql
-
-
二、编译zlm和wvp
-
路径约定
-
编译路径(/www/torch_bianyi)
-
zlm编译路径
- /www/torch_bianyi/zlm
-
wvp编译路径
- /www/torch_bianyi/wvp
-
运行路径(/www/torch_lmt)
-
zlm运行路径
- /www/torch_lmt/zlm
-
wvp运行路径
- /www/torch_lmt/wvp
-
开始编译
编译zlm
##创建编译路径
mkdir -p /www/torch_bianyi/zlm
##进入编译目录
cd /www/torch_bianyi/zlm
##国内服务器(与国外服务器二选一)
git clone https://gitee.com/xia-chu/ZLMediaKit.git
##国外服务器(与国外服务器二选一)
git clone https://github.com/ZLMediaKit/ZLMediaKit
cd ZLMediaKit
##初始化并递归地更新所有的子模块
git submodule update --init --recursive
##创建目录
mkdir -p build release/linux/Release/
cd build
##配置项目的构建过程
cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_WEBRTC=true -DENABLE_TESTS=false ..
##使用CMake的构建系统来构建名为"MediaServer"的目标
cmake --build . --target MediaServer
编译wvp(修改样式文件在本步骤的编译前实现)
mkdir -p /www/torch_bianyi/wvp
#地址可以更换
cd /www/torch_bianyi/wvp
##服务器在大陆
git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git
##服务器在海外
git clone https://github.com/648540858/wvp-GB28181-pro.git
#前端编译
cd wvp-GB28181-pro/web_src
##注意,此事如果要修改web_src下面的样式,请修改后覆盖源文件
修改样式文件
#==========修改细节开始=============
# 1.修改/www/torch_bianyi/wvp/wvp-GB28181-pro/web_src/index.html 的title
# 2.修改/www/torch_bianyi/wvp/wvp-GB28181-pro/web_src/src/components/Login.vue 文件(修改名字)
# <span class="login100-form-title p-b-26">拓驰流媒体云平台</span>
# <span class="login100-form-title p-b-48">
# 注释或删除本行 <!--<i class="fa fa-video-camera"></i>-->
#3.wvp-GB28181-pro/web_src/config/index.js的localhost:18080 为localhost:18880(共两处好像不修改也没事)
#4.修改/www/torch_bianyi/wvp/wvp-GB28181-pro/web_src/static/css/login.css 搜索 #b721ff,替换为 #1578FF
#5.修改/www/torch_bianyi/wvp/wvp-GB28181-pro/web_src/static 目录 logo.png、favicon.ico 修改为自己的
#6.修改/www/torch_bianyi/wvp/wvp-GB28181-pro/web_src/static/images/zlm-login.png为自己要的图片
# 7.修改/www/torch_bianyi/wvp/wvp-GB28181-pro/web_src/src/assets目录下的logo.png 和 zlm-log.png 为自己的图片
##==========修改结束=============
修改好后继续
# 下载依赖
npm install --registry=https://registry.npmmirror.com
# 编译
npm run build
#后端编译
cd ..
##使用Maven构建工具来清理项目、打包项目,并在构建过程中跳过执行测试
mvn clean package -DskipTests
开始部署
部署zlm
#创建安装目录
mkdir -p /www/torch_lmt/zlm
# 进入zlm 编译项目目录
cd /www/torch_bianyi/zlm
cd ZLMediaKit
#复制编译后文件到安装目录
cp -r release/linux/Release/* /www/torch_lmt/zlm/
-
修改zlm配置(cd /www/torch_lmt/zlm)
-
cd /www/torch_lmt/zlm vim config.ini #修改config.ini文件,修改好后按Esc后输入 :wq
具体修改如下:
secret=
mediaServerId=
port=80---修改为18885
https服务器监听端口
sslport=10443
rtsp服务器监听地址
port=10554
如果要求外网链接,还需要将下面一行注释掉,并加一行(注意最后的空格) allow_ip_range=
#allow_ip_range=::1,127.0.0.1,172.16.0.0-172.31.255.255,192.168.0.0-192.168.255.255,10.0.0.0-10.255.255.255
allow_ip_range=
注意,要以zlm的secret为主,wvp的用secret的,这样不容易出错
[api] apiDebug=1 defaultSnap=./www/logo.png downloadRoot=./www #需要与wvp的yml 设置匹配 secret=torch-secret-73f7-bb6b-4889-a715-d9eb2 snapRoot=./www/snap/ [cluster] origin_url= retry_count=3 timeout_sec=15 [ffmpeg] bin=/usr/bin/ffmpeg cmd=%s -re -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264 -f flv %s log=./ffmpeg/ffmpeg.log restart_sec=0 snap=%s -rtsp_transport tcp -i %s -y -f mjpeg -frames:v 1 %s [general] check_nvidia_dev=1 enableVhost=0 enable_ffmpeg_log=0 flowThreshold=1024 maxStreamWaitMS=15000 #需要与wvp的yml 设置匹配 mediaServerId=mediaServerId_node_1 mergeWriteMS=0 resetWhenRePlay=1 streamNoneReaderDelayMS=20000 unready_frame_cache=100 wait_add_track_ms=3000 wait_track_ready_ms=10000
-
测试zlm是否可用,并创建开机脚本
-
#进入拷贝后的目录,测试可以用 cd /www/torch_lmt/zlm ./MediaServer #创建开机启动脚本 vim /etc/systemd/system/zlm.service #复制以下内容 ##==============内容=================== [Unit] Description=ZLMediaKit [Service] Environment="PATH=/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin" #路径需要 ExecStart=/www/torch_lmt/zlm/MediaServer -c /www/torch_lmt/zlm/config.ini StandardOutput=null [Install] WantedBy=multi-user.target ##===============内容结束===================== #按Esc键,然后输入:wq 退出编辑 (可再次进入看是否保存成功,成功后按Esc键,然后再输入:wq) ##添加开机启动 sudo systemctl enable zlm.service ##查看是否开机启动成功 systemctl is-enabled zlm.service #启动 sudo systemctl start zlm #查看是否正在运行 sudo systemctl status zlm #其他命令 #启停 sudo systemctl start zlm sudo systemctl stop zlm sudo systemctl disable zlm sudo apt-get remove zlm
部署wvp
#创建运行目录 mkdir -p /www/torch_lmt/wvp # 进入编译目录 cd /www/torch_bianyi/wvp cd wvp-GB28181-pro/ # 复制java包运行目录(用tab键补齐jar文件名) cp target/wvp-pro-2.6.6-xxxxx.jar /www/torch_lmt/wvp/wvp-pro.jar # 复制配置文件到运行目录 cp src/main/resources/all-application.yml /www/torch_lmt/wvp/application.yml —
-
修改wvp配置 (/www/torch_lmt/wvp/application.yml)
-
修改url: jdbc:mysql:后面的数据库信息(数据库名、用户名、密码)
-
修改 secret: 的值,与zlm匹配(搜索本文:torch-secret)
-
修改server:下面的port: 80 修改为访问端口,接口和访问都是这个端口(本次修改为:18880)(搜索:WVP监听的HTTP端口, 网页和接口调用都是这个端口)
-
修改 # [必须修改] zlm服务器的内网IP的 下一行的ip为内网ip
-
修改mediaServerId的值,与zlm匹配(搜素本文:general.mediaServerId,然后在下一行id: mediaServerId_node_1)---切记id:后面要留个空格!
修改默认密码
-
修改默认5060端口
-
修改最后的接口文档是否显示
进入修改
cd /www/torch_lmt/wvp/ vim application.yml
文件粘贴如下:
# 此配置文件只是用作展示所有配置项, 不可直接使用 spring: # 设置接口超时时间 mvc: async: request-timeout: 20000 # [可选]上传文件大小限制 servlet: multipart: max-file-size: 10MB max-request-size: 100MB # REDIS数据库配置 redis: # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1 host: 127.0.0.1 # [必须修改] 端口号 port: 6379 # [可选] 数据库 DB database: 6 # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接 password: # [可选] 超时时间 timeout: 10000 # [可选] 一个pool最多可分配多少个jedis实例 poolMaxTotal: 1000 # [可选] 一个pool最多有多少个状态为idle(空闲)的jedis实例 poolMaxIdle: 500 # [可选] 最大的等待时间(秒) poolMaxWait: 5 # [必选] jdbc数据库配置 datasource: # kingbase配置 # type: com.zaxxer.hikari.HikariDataSource # driver-class-name: com.kingbase8.Driver # url: jdbc:kingbase8://192.168.1.55:54321/wvp?useUnicode=true&characterEncoding=utf8 # username: system # password: system # postgresql配置 # type: com.zaxxer.hikari.HikariDataSource # driver-class-name: org.postgresql.Driver # url: jdbc:postgresql://192.168.1.242:3306/242wvp # username: wvp # password: 123456 # mysql配置 type: com.zaxxer.hikari.HikariDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true username: wvp password: 12345678 hikari: connection-timeout: 20000 # 是客户端等待连接池连接的最大毫秒数 initialSize: 50 # 连接池初始化连接数 maximum-pool-size: 200 # 连接池最大连接数 minimum-idle: 10 # 连接池最小空闲连接数 idle-timeout: 300000 # 允许连接在连接池中空闲的最长时间(以毫秒为单位) max-lifetime: 1200000 # 是池中连接关闭后的最长生命周期(以毫秒为单位) # 修改分页插件为 postgresql, 数据库类型为mysql不需要 #pagehelper: # helper-dialect: postgresql # [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口 server: port: 18880 # [可选] HTTPS配置, 默认不开启 ssl: # [可选] 是否开启HTTPS访问 enabled: false # [可选] 证书文件路径,放置在resource/目录下即可,修改xxx为文件名 key-store: classpath:xxx.jks # [可选] 证书密码 key-store-password: password # [可选] 证书类型, 默认为jks,根据实际修改 key-store-type: JKS # 配置证书可以使用如下两项,如上面二选一即可 # PEM 编码证书 certificate: xx.pem # 私钥文件 certificate-private-key: xx.key # 作为28181服务器的配置 sip: # [必须修改] 本机的IP,对应你的网卡,监听什么ip就是使用什么网卡, # 如果要监听多张网卡,可以使用逗号分隔多个IP, 例如: 192.168.1.4,10.0.0.4 # 如果不明白,就使用0.0.0.0,大部分情况都是可以的 # 请不要使用127.0.0.1,任何包括localhost在内的域名都是不可以的。 ip: 0.0.0.0 # [可选] 没有任何业务需求,仅仅是在前端展示的时候用 show-ip: 192.168.0.100 # [可选] 28181服务监听的端口 port: 5060 # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007) # 后两位为行业编码,定义参照附录D.3 # 3701020049标识山东济南历下区 信息行业接入 # [可选] domain: 4401020049 # [可选] id: 44010200492000000001 # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验 password: admin123 # [可选] 国标级联注册失败,再次发起注册的时间间隔。 默认60秒 register-time-interval: 60 # [可选] 云台控制速度 ptz-speed: 50 # TODO [可选] 收到心跳后自动上线, 重启服务后会将所有设备置为离线,默认false,等待注册后上线。设置为true则收到心跳设置为上线。 # keepalliveToOnline: false # 是否存储alarm信息 alarm: false # 做为JT1078服务器的配置 jt1078: #[必须修改] 是否开启1078的服务 enable: true #[必修修改] 1708设备接入的端口 port: 21078 #[可选] 设备鉴权的密码 password: admin123 #zlm 默认服务器配置 media: # [必须修改] zlm服务器唯一id,用于触发hook时区别是哪台服务器,general.mediaServerId id:mediaServerId_node_1 # [必须修改] zlm服务器的内网IP ip: 192.168.0.100 # [可选] 返回流地址时的ip,置空使用 media.ip stream-ip: # [可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.ip sdp-ip: # [可选] zlm服务器的hook所使用的IP, 默认使用sip.ip hook-ip: # [必须修改] zlm服务器的http.port http-port: 808 # [可选] zlm服务器的http.sslport, 置空使用zlm配置文件配置 http-ssl-port: # [可选] zlm服务器的rtmp.port, 置空使用zlm配置文件配置 rtmp-port: # [可选] zlm服务器的rtmp.sslport, 置空使用zlm配置文件配置 rtmp-ssl-port: # [可选] zlm服务器的 rtp_proxy.port, 置空使用zlm配置文件配置 rtp-proxy-port: # [可选] zlm服务器的 rtsp.port, 置空使用zlm配置文件配置 rtsp-port: # [可选] zlm服务器的 rtsp.sslport, 置空使用zlm配置文件配置 rtsp-ssl-port: # [可选] 是否自动配置ZLM, 如果希望手动配置ZLM, 可以设为false, 不建议新接触的用户修改 auto-config: true # [可选] zlm服务器的hook.admin_params=secret secret: torch-secret-73f7-bb6b-4889-a715-d9eb2 # 录像路径 record-path: ./www/record # 录像保存时长 record-day: 7 # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试 rtp: # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输 enable: true # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功 port-range: 30000,30500 # 端口范围 # [可选] 国标级联在此范围内选择端口发送媒体流,请不要与收流端口范围重合 send-port-range: 50502,50506 # 端口范围 # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用 record-assist-port: 0 # [可选] 日志配置, 如果不需要在jar外修改日志内容那么可以不配置此项 logging: config: classpath:logback-spring.xml # [根据业务需求配置] user-settings: # [可选] 服务ID,不写则为000000 server-id: # [可选] 自动点播, 使用固定流地址进行播放时,如果未点播则自动进行点播, 需要rtp.enable=true auto-apply-play: false # [可选] 部分设备需要扩展SDP,需要打开此设置 senior-sdp: false # 保存移动位置历史轨迹:true:保留历史数据,false:仅保留最后的位置(默认) save-position-history: false # 点播/录像回放 等待超时时间,单位:毫秒 play-timeout: 18000 # 上级点播等待超时时间,单位:毫秒 platform-play-timeout: 60000 # 是否开启接口鉴权 interface-authentication: true # 接口鉴权例外的接口, 即不进行接口鉴权的接口,尽量详细书写,尽量不用/**,至少两级目录 interface-authentication-excludes: - /api/v1/** # 推流直播是否录制 record-push-live: true # 国标是否录制 record-sip: true # 是否将日志存储进数据库 logInDatabase: true # 使用推流状态作为推流通道状态 use-pushing-as-status: true # 使用来源请求ip作为streamIp,当且仅当你只有zlm节点它与wvp在一起的情况下开启 use-source-ip-as-stream-ip: false # 国标点播 按需拉流, true:有人观看拉流,无人观看释放, false:拉起后不自动释放 stream-on-demand: true # 推流鉴权, 默认开启 push-authority: true # 设备上线时是否自动同步通道 sync-channel-on-device-online: false # 是否使用设备来源Ip作为回复IP, 不设置则为 false sip-use-source-ip-as-remote-address: false # 是否开启sip日志 sip-log: true # 是否开启sql日志 sql-log: true # 消息通道功能-缺少国标ID是否给所有上级发送消息 send-to-platforms-when-id-lost: true # 保持通道状态,不接受notify通道状态变化, 兼容海康平台发送错误消息 refuse-channel-status-channel-form-notify: false # 设置notify缓存队列最大长度,超过此长度的数据将返回486 BUSY_HERE,消息丢弃, 默认10000 max-notify-count-queue: 10000 # 设备/通道状态变化时发送消息 device-status-notify: true # 上级平台点播时不使用上级平台指定的ssrc,使用自定义的ssrc,参考国标文档-点播外域设备媒体流SSRC处理方式 use-custom-ssrc-for-parent-invite: true # 国标级联离线后多久重试一次注册 register-again-after-time: 60 # 国标续订方式,true为续订,每次注册在同一个会话里,false为重新注册,每次使用新的会话 register-keep-int-dialog: false # 跨域配置,配置你访问前端页面的地址即可, 可以配置多个 allowed-origins: - http://localhost:8008 - http://192.168.1.3:8008 # 关闭在线文档(生产环境建议关闭) springdoc: api-docs: enabled: true swagger-ui: enabled: true
-
测试wvp可用性,并创建开机脚本
-
#进入拷贝后目录测试代码 cd /www/torch_lmt/wvp ls java -jar wvp-pro.jar
创建开机脚本
vim /etc/systemd/system/wvp.service
脚本如下:
[Unit]
Description=wvp
[Service]
Environment="PATH=/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin"
ExecStart=/usr/bin/java -jar /www/torch_lmt/wvp/wvp-pro.jar --spring.config.location=/www/torch_lmt/wvp/application.yml
StandardOutput=null
[Install]
WantedBy=multi-user.target设置开机启动
sudo systemctl enable wvp.service
启动
sudo systemctl start wvp
查看是否开机启动成功
systemctl is-enabled wvp.service
查看是否正在运行
sudo systemctl status wvp
其他命令
#卸载 sudo systemctl stop wvp sudo systemctl disable wvp sudo apt-get remove wvp
-
安装助手
编译
mkdir -p /www/torch_bianyi/assist
cd /www/torch_bianyi/assist
git clone https://gitee.com/pan648540858/wvp-pro-assist.git
git clone https://github.com/648540858/wvp-pro-assist.git
cd wvp-pro-assist
mvn clean package -DskipTests
安装
mkdir -p /www/torch_lmt/assist
cp target/wvp-pro-assist-2.6.8-08261304.jar /www/torch_lmt/assist/wvp-pro-assist.jar
创建开机启动文件
vim /etc/systemd/system/assist.service
[Unit]
Description=assist
[Service]
Environment="PATH=/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin"
ExecStart=/usr/bin/java -jar /www/torch_lmt/assist/wvp-pro-assist.jar
StandardOutput=null
[Install]
WantedBy=multi-user.target
设置开机启动
##设置开机启动
sudo systemctl enable assist.service
##启动
sudo systemctl start assist.service
##查看是否开机启动成功
systemctl is-enabled assist.service
#查看是否正在运行
sudo systemctl status assist.service
#其他命令
#卸载
sudo systemctl stop assist.service
sudo systemctl disable assist.service
sudo apt-get remove assist.service
#手动启动测试
cd /www/torch_lmt/assist/
java -jar wvp-pro-assist.jar