wvp安装方法

部署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=

    image-20240301165654056

    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)

    1. 修改url: jdbc:mysql:后面的数据库信息(数据库名、用户名、密码)

      image-20240306123701088

    2. 修改 secret: 的值,与zlm匹配(搜索本文:torch-secret)

    3. 修改server:下面的port: 80 修改为访问端口,接口和访问都是这个端口(本次修改为:18880)(搜索:WVP监听的HTTP端口, 网页和接口调用都是这个端口)image-20240301170205416

    4. 修改 # [必须修改] zlm服务器的内网IP的 下一行的ip为内网ip

    5. 修改mediaServerId的值,与zlm匹配(搜素本文:general.mediaServerId,然后在下一行id: mediaServerId_node_1)---切记id:后面要留个空格!

      image-20240304215336608

      修改默认密码

      1. image-20240301165846297
    6. 修改默认5060端口

      image-20240304214827102

    7. 修改最后的接口文档是否显示

      image-20240301170232039

    进入修改

    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