使用最新版的wvp和ZLMediaKit搭建Gb28181测试服务器

打印 上一主题 下一主题

主题 980|帖子 980|积分 2940

说明

前段时间发布了一系列GB28181测试情况的搭建,近来整理一下服务器和模拟设备一个完备的博客,不须要设备就可以熟悉GB28181协议.
安装

主机发起使用Ubuntu 22.04.5 LTS x86_64及以上版本.
1.安装nodejs

简介

到nodejs官网下载最新LTS版本. 因为nodejs依赖glic库,所以ubuntu使用最新的LTS版本.
当前nodejs依赖glibc2.28版本,为了确保nodejs能正常运行,须要先查询体系的glibc版本.
  1. strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_
  2. #输出如下信息
  3. ......
  4. GLIBC_2.27
  5. GLIBC_2.28
  6. GLIBC_2.29
  7. GLIBC_2.30
  8. GLIBC_2.31
  9. GLIBC_2.32
  10. GLIBC_2.33
  11. GLIBC_2.34
  12. GLIBC_2.35
复制代码
安装步骤

  1. #解压缩
  2. tar -Jxf node-v20.9.0-linux-x64.tar.xz
  3. #移动位置
  4. sudo mv node-v20.9.0-linux-x64/ /opt
  5. #编辑/etc/profile内容
  6. export PATH="/opt/node-v20.9.0-linux-x64/bin:$PATH"
  7. #使环境变量使能
  8. source /etc/profile
  9. #查看nodejs是否正常安装
  10. node -v
  11. v20.9.0
  12. npm -v
  13. 10.1.0
复制代码
2.安装java情况

  1. sudo apt install -y openjdk-11-jre maven
  2. #确认java安装成功
  3. java -version
  4. #输出版本信息
  5. openjdk 11.0.21 2023-10-17
  6. OpenJDK Runtime Environment (build 11.0.21+9-post-Ubuntu-0ubuntu122.04)
  7. OpenJDK 64-Bit Server VM (build 11.0.21+9-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
  8. #maven
  9. mvn -version
  10. Apache Maven 3.6.3
  11. Maven home: /usr/share/maven
  12. Java version: 11.0.24, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
  13. Default locale: en_US, platform encoding: UTF-8
  14. OS name: "linux", version: "6.5.0-18-generic", arch: "amd64", family: "unix"
复制代码
3.安装mysql

安装

  1. #移除以前的mysql相关
  2. sudo apt remove --purge mysql-\*
  3. #安装mysql
  4. sudo apt install mysql-server mysql-client
  5. #查看是否启动
  6. systemctl status mysql
  7. #手动启动
  8. systemctl start mysql
  9. #查看mysql版本
  10. mysql --version
复制代码
修改暗码

  1. #免密进入mysql
  2. sudo mysql -uroot
  3. #your_new _password 修改成用户密码
  4. alter user 'root'@'localhost' identified with mysql_native_password by 'your_new _password';
  5. #然后就可以使用密码登录了
  6. mysql -u root -p
  7. use mysql;
  8. #root账号可以访问所有主机
  9. update user set host='%' where user= 'root';
  10. #ERROR 1046 (3D000): No database selected
  11. flush privileges;
  12. #授权
  13. grant all on *.* to 'root'@'%';
  14. flush privileges;
  15. quit;
复制代码
4.安装redis

  1. sudo apt update
  2. sudo apt install redis-server
  3. #启动
  4. redis-server
  5. #查看Redis是否正常
  6. systemctl status redis
  7. redis-cli
  8. #输入ping返回PONG表示正常
复制代码
5.安装编译器

  1. sudo apt install build-essential
  2. g++ --version
  3. g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
  4. Copyright (C) 2021 Free Software Foundation, Inc.
  5. This is free software; see the source for copying conditions.  There is NO
  6. warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
复制代码
6.安装cmake

官网https://cmake.org/下载最新稳定版本 cmake-3.27.8-linux-x86_64.tar.gz, 这样的好处可以方便查找资助文档,方便查看cmake内部的资料.
  1. tar -zxvf cmake-3.27.8-linux-x86_64.tar.gz
  2. sudo mv cmake-3.27.8-linux-x86_64 /opt/
  3. sudo vim /etc/profile
  4. #增加
  5. export PATH="/opt/cmake-3.27.8-linux-x86_64/bin:$PATH"
  6. source /etc/profile
  7. cmake --version
  8. #显示安装成功
  9. cmake version 3.27.8
  10. CMake suite maintained and supported by Kitware (kitware.com/cmake).
复制代码
/opt/cmake-3.27.8-linux-x86_64/doc/cmake/html为网页资助文档.
7.安装依赖库

  1. sudo apt install -y libssl-dev
  2. sudo apt install -y libsdl1.2-dev
  3. sudo apt install -y libavcodec-dev
  4. sudo apt install -y libavutil-dev
  5. sudo apt install -y ffmpeg
复制代码
8.编译ZLMediaKit

  1. git clone https://gitee.com/xia-chu/ZLMediaKit
  2. cd ZLMediaKit
  3. git submodule update --init
  4. git submodule status
  5.     08c094ea14f259ecf0c356e6243cb47ee96ce292 3rdpart/ZLToolKit (heads/master)
  6.     69098a18b9af0c47549d9a271c054d13ca92b006 3rdpart/jsoncpp (1.9.0-178-g69098a18)
  7.     cf83ebc62e65ae6f3b73bc5ebd06cb0b2da49fa5 3rdpart/media-server (v1.0.0-173-gcf83ebc6)
  8.     b02d2a4c1abf95db45e50bb77d789defa0fcc4b7 www/webassist (heads/main)
  9. #编译
  10. mkdir build
  11. cd build
  12. cmake ..
  13. make -j4
复制代码
编译效果在release目录下,主要有三部门构成:


  • MediaServer 历程
    1. cd ZLMediaKit/release/linux/Debug
    2. #通过-h可以了解启动参数
    3. ./MediaServer -h
    复制代码
  • c api 的 SDK
  1. 头文件在ZLMediaKit/api/include
  2. 库文件为:ZLMediaKit/release/linux/Debug/libmk_api.so
复制代码


  • 以test_开头的测试程序
相关代码在ZLMediaKit/tests目录下,你可以对照代码启动测试历程。
9.编译wvp-GB28181-pro

  1. git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git
  2. #1.编译前端页面
  3. cd wvp-GB28181-pro/web_src/
  4. npm --registry=https://registry.npmmirror.com install
  5. npm run build
  6. #编译完成后会生成目录: wvp-GB28181-pro/src/main/resources/static
  7. #2.生成可执行jar
  8. cd wvp-GB28181-pro
  9. mvn package
  10. #编译后生成文件: wvp-GB28181-pro/target/wvp-pro-2.7.3-10250742.jar
  11. #3.生成war
  12. cd wvp-GB28181-pro
  13. mvn package -P war
  14. #编译后生成文件: wvp-GB28181-pro/target/wvp-pro-2.7.3-10250742.war
复制代码
配置

目录结构如下
  1. .
  2. ├── config #配置文件
  3. ├── record #录像保存
  4. ├── wvp-GB28181-pro
  5. └── ZLMediaKit
复制代码
把所有的配置文件放到config目录中
  1. cp wvp-GB28181-pro/target/classes/配置详情.yml config
  2. cp ZLMediaKit/release/linux/Debug/config.ini config
复制代码
终极config目录内容如下:
  1. config
  2. ├── wvp_gb28181.sh #wvp-GB28181-pro运行脚本
  3. ├── wvp_gb28181.yml #wvp-GB28181-pro配置文件
  4. ├── ZLMediaKit.ini #ZLMediaKit配置文件
  5. └── ZLMediaKit.sh #ZLMediaKit运行脚本
复制代码
1.ZLMediaKit配置

  1. [api]
  2.     #和 wvp_gb28181.yml 中 media:secret: 一致
  3.     secret=BkPj2ca6QPpY5RccREJq4kAOu9ZEt70x
  4. [general]
  5.     #和 wvp_gb28181.yml 中 media:id: 一致
  6.     mediaServerId=FQ3TF8yT83wh5Wvz
  7. [http]
  8.     #和 wvp_gb28181.yml 中 media:http-port: 一致
  9.     port=80
  10.    
  11. [rtp_proxy]
  12.          #和 wvp_gb28181.yml 中 media:rtp:port-range: 一致
  13.     port_range=30000-35000       
复制代码
2.wvp-GB28181-pro配置

2.1.配置ZLMediaKit连接信息

  1. media:
  2.         #和ZLMediaKit设置一致
  3.         secret: BkPj2ca6QPpY5RccREJq4kAOu9ZEt70x
  4.         id: FQ3TF8yT83wh5Wvz
  5.         http-port: 80
  6.         rtp:
  7.                 port-range: 30000,30500
  8.        
  9.         # [必须修改] zlm服务器的内网IP
  10.         ip: 192.168.137.2
  11.         hook-ip: 192.168.137.2
复制代码
2.2.28181服务器的配置

  1. sip:
  2.         ip: 192.168.137.2
  3.     # [可选] 没有任何业务需求,仅仅是在前端展示的时候用
  4.     show-ip: 192.168.137.2
  5.     # [可选] 28181服务监听的端口
  6.     port: 5061
  7.     # [可选]
  8.     domain: Local1
  9.     # [可选]
  10.     id: 32050950002000005001
  11.     # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
  12.     password: eLTE@com123   
复制代码
2.3.配置web服务器

  1. #web访问
  2. server:
  3.     port: 18080
复制代码
2.4.数据库配置

2.4.1.修改root用户的暗码

  1. #查看数据库状态
  2. systemctl status mysql
  3. #进入mysql
  4. mysql -u root -p
  5. #更改root用户密码为root123,并修改为root用户可以使用任何电脑访问所有数据库
  6. use mysql;
  7. update user set host='%' where user= 'root';
  8. flush privileges;
  9. select host,user,plugin from user where user='root';
  10. alter user 'root'@'%' identified with mysql_native_password by 'root123';
  11. flush privileges;
  12. grant all on *.* to 'root'@'%';
  13. flush privileges;
复制代码
2.4.2.删除以前wvp相关数据库

  1. #显示所有数据库
  2. mysql> show databases;
  3. +--------------------+
  4. | Database           |
  5. +--------------------+
  6. | information_schema |
  7. | mysql              |
  8. | performance_schema |
  9. | sys                |
  10. | wvp                |
  11. | wvp2               |
  12. +--------------------+
  13. 6 rows in set (0.00 sec)
  14. #显示当前数据库
  15. select database();
  16. +------------+
  17. | database() |
  18. +------------+
  19. | mysql      |
  20. +------------+
  21. 1 row in set (0.00 sec)
  22. #删除wvp相关数据库
  23. mysql> drop database wvp;
  24. Query OK, 17 rows affected (0.32 sec)
  25. mysql> drop database wvp2;
  26. Query OK, 0 rows affected (0.01 sec)
复制代码
2.4.3.删除mysql数据库中wvp相关表格

  1. #显示mysql数据库中所有表格
  2. mysql> show tables;
  3. +------------------------------------------------------+
  4. | Tables_in_mysql                                      |
  5. +------------------------------------------------------+
  6. | columns_priv                                         |
  7. | component                                            |
  8. | db                                                   |
  9. | default_roles                                        |
  10. | engine_cost                                          |
  11. | func                                                 |
  12. | general_log                                          |
  13. | global_grants                                        |
  14. | gtid_executed                                        |
  15. | help_category                                        |
  16. | help_keyword                                         |
  17. | help_relation                                        |
  18. | help_topic                                           |
  19. | innodb_index_stats                                   |
  20. | innodb_table_stats                                   |
  21. | password_history                                     |
  22. | plugin                                               |
  23. | procs_priv                                           |
  24. | proxies_priv                                         |
  25. | replication_asynchronous_connection_failover         |
  26. | replication_asynchronous_connection_failover_managed |
  27. | replication_group_configuration_version              |
  28. | replication_group_member_actions                     |
  29. | role_edges                                           |
  30. | server_cost                                          |
  31. | servers                                              |
  32. | slave_master_info                                    |
  33. | slave_relay_log_info                                 |
  34. | slave_worker_info                                    |
  35. | slow_log                                             |
  36. | tables_priv                                          |
  37. | time_zone                                            |
  38. | time_zone_leap_second                                |
  39. | time_zone_name                                       |
  40. | time_zone_transition                                 |
  41. | time_zone_transition_type                            |
  42. | user                                                 |
  43. | wvp_cloud_record                                     |
  44. | wvp_device                                           |
  45. | wvp_device_alarm                                     |
  46. | wvp_device_channel                                   |
  47. | wvp_device_mobile_position                           |
  48. | wvp_gb_stream                                        |
  49. | wvp_log                                              |
  50. | wvp_media_server                                     |
  51. | wvp_platform                                         |
  52. | wvp_platform_catalog                                 |
  53. | wvp_platform_gb_channel                              |
  54. | wvp_platform_gb_stream                               |
  55. | wvp_resources_tree                                   |
  56. | wvp_stream_proxy                                     |
  57. | wvp_stream_push                                      |
  58. | wvp_user                                             |
  59. | wvp_user_role                                        |
  60. +------------------------------------------------------+
  61. 54 rows in set (0.00 sec)
  62. #删除wvp相关表格
  63. drop table wvp_cloud_record;
  64. drop table wvp_device;
  65. drop table  wvp_device_alarm;;
  66. drop table  wvp_device_channel;
  67. drop table  wvp_device_mobile_position;
  68. drop table  wvp_gb_stream;
  69. drop table  wvp_log;
  70. drop table  wvp_media_server;
  71. drop table  wvp_platform;
  72. drop table  wvp_platform_catalog;
  73. drop table  wvp_platform_gb_channel;
  74. drop table  wvp_platform_gb_stream;
  75. drop table  wvp_resources_tree;
  76. drop table  wvp_stream_proxy;
  77. drop table  wvp_stream_push;
  78. drop table  wvp_user;
  79. drop table  wvp_user_role;
复制代码
2.4.4.数据库连接配置修改

原来的
  1.         dynamic:
  2.             primary: master
  3.             datasource:
  4.                 master:
  5.                     type: com.zaxxer.hikari.HikariDataSource
  6.                     driver-class-name: com.mysql.cj.jdbc.Driver
  7.                     url: jdbc:mysql://127.0.0.1:3306/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
  8.                     username: root
  9.                     password: root123
  10.                     hikari:
  11.                         connection-timeout: 20000             # 是客户端等待连接池连接的最大毫秒数
  12.                         initialSize: 50                       # 连接池初始化连接数
  13.                         maximum-pool-size: 200                # 连接池最大连接数
  14.                         minimum-idle: 10                       # 连接池最小空闲连接数
  15.                         idle-timeout: 300000                  # 允许连接在连接池中空闲的最长时间(以毫秒为单位)
  16.                         max-lifetime: 1200000                 # 是池中连接关闭后的最长生命周期(以毫秒为单位)
  17.                 share:
  18.                     type: com.zaxxer.hikari.HikariDataSource
  19.                     driver-class-name: com.mysql.cj.jdbc.Driver
  20.                     url: jdbc:mysql://127.0.0.1:3306/wvp269_1?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
  21.                     username: root
复制代码
修改为
  1.         dynamic:
  2.             primary: master
  3.             datasource:
  4.                 master:
  5.                     type: com.zaxxer.hikari.HikariDataSource
  6.                     driver-class-name: com.mysql.cj.jdbc.Driver
  7.                     url: jdbc:mysql://127.0.0.1:3306/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
  8.                     username: root
  9.                     password: root123
  10.                     hikari:
  11.                         connection-timeout: 20000             # 是客户端等待连接池连接的最大毫秒数
  12.                         initialSize: 50                       # 连接池初始化连接数
  13.                         maximum-pool-size: 200                # 连接池最大连接数
  14.                         minimum-idle: 10                       # 连接池最小空闲连接数
  15.                         idle-timeout: 300000                  # 允许连接在连接池中空闲的最长时间(以毫秒为单位)
  16.                         max-lifetime: 1200000                 # 是池中连接关闭后的最长生命周期(以毫秒为单位)   
复制代码
2.4.5.建立并导入数据库

  1. #复制数据库
  2. cp wvp-GB28181-pro/数据库/2.7.3/初始化-mysql-2.7.3.sql config/mysql.sql
复制代码
  1. create DATABASE wvp2;
  2. use wvp2;
  3. source /home/multimedia/gb28181/wvp_zlm_platform/config/mysql.sql;
  4. flush privileges;
  5. exit
复制代码
2.5.跨域配置

  1. # [根据业务需求配置]
  2. user-settings:
  3.     # 跨域配置,不配置此项则允许所有跨域请求,配置后则只允许配置的页面的地址请求, 可以配置多个
  4.     allowed-origins:
  5.         - http://localhost:8008
  6.         - http://192.168.137.2:8008
复制代码
运行

准备运行脚本

ZLMediaKit.sh

  1. WVP_ZLM_PLATFORM_PATH=/home/multimedia/gb28181/wvp_zlm_platform
  2. ZLMEDIAKIT_MEDIASERVER=${WVP_ZLM_PLATFORM_PATH}/ZLMediaKit/release/linux/Debug/MediaServer
  3. ZLMEDIAKIT_CONFIG_FILE=${WVP_ZLM_PLATFORM_PATH}/config/ZLMediaKit.ini
  4. sudo ${ZLMEDIAKIT_MEDIASERVER} -c ${ZLMEDIAKIT_CONFIG_FILE}
复制代码
wvp_gb28181.sh

  1. WVP_ZLM_PLATFORM_PATH=/home/multimedia/gb28181/wvp_zlm_platform
  2. WVP_GB28181_JAR=${WVP_ZLM_PLATFORM_PATH}/wvp-GB28181-pro/target/wvp-pro-2.7.3-10250742.jar
  3. WVP_GB28181_CONFIG_FILE=${WVP_ZLM_PLATFORM_PATH}/config/wvp_gb28181.yml
  4. sudo java -jar ${WVP_GB28181_JAR} --spring.config.location=${WVP_GB28181_CONFIG_FILE}
复制代码
运行服务

每个脚本须要一个终端窗口
  1. #需要先运行ZLMediaKit
  2. ZLMediaKit.sh
  3. #测试
  4. http://192.168.137.2/
  5. https://192.168.137.2/webassist/?secret=BkPj2ca6QPpY5RccREJq4kAOu9ZEt70x
  6. https://192.168.137.2/webrtc
  7. #然后运行wvp_gb28181
  8. ./wvp_gb28181.sh
  9. #测试
  10. http://192.168.137.2:18080/#/login
  11. #用户名: admin
  12. #密码: admin
复制代码
使用国标设备对接国标服务器

大概手头没有国标设备,为了方便验证国标服务器是否搭建成功,这里使用国标模拟设备进行对接测试.国标模拟设备选择 http://happytimesoft.com/的国标模拟设备,下载所在为 http://happytimesoft.com/products/gb28181-device/index.html,支持windows x86,windows x64, linux,andorid等,这里使用windows x64版本.
下载后解压修改配置文件gb28181device.cfg,其他保持不变.
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <config>                    
  3.     <server_ip>192.168.137.2</server_ip>
  4.     <server_port>5061</server_port>
  5.     <server_id>32050950002000005001</server_id>
  6.     <server_domain>Local1</server_domain>
  7.     <device_id>32050950002000005067</device_id>
  8.     <device_name>myTestDevice</device_name>
  9.     <password>eLTE@com123</password>
  10.     <channel>
  11.         <cid>32050950001320418045</cid>
  12.         <cname>myTestCh1</cname>
  13.     </channel>
  14. </config>
复制代码
双击GB28181Device.exe运行国标模拟设备,在国标设备页面表现出设备

虚拟设备控制台表现如下信息说明注册成功
  1. Happytime GB28181 Device V7.0
  2. Registering to the platform 192.168.137.2
  3. sip_ntf_cb, evt : PUEVT_REGING
  4. sip server date : 2024-10-28T14:58:32.148
  5. sip_ntf_cb, evt : PUEVT_REG_PASS
复制代码
在http://192.168.137.2:18080中打开’国标设备->通道->播放’,即可正常播放,效果如下图

云端录像

参考官网文档: https://doc.wvp-pro.cn/#/
由于须要验证音频是否正常,录像后发送到手机端播放.
摘录官方文档说明
云端录像是对录制在zlm服务下的录像文件的管理,录像的文件路径默认在ZLM/www/record下。
   

  • 国标设备是否录像: 可以再WVP的配置中user-settings.record-sip设置为true那么每次点播以及录像回放都会录像;
  • 推流设备是否录像: 可以再WVP的配置中user-settings.record-push-live设置为true;
  • 拉流代理的是否录像: 在添加和编辑拉流代理时可以指定, 每次点播都会进行录像
  • 录像文件存储路径配置: 可以修改media.record-path来修改录像路径,但是如果有旧的录像文件,请不要迁徙,因为数据库记录了每一个录像的绝对路径,一旦修改会造成找到文件,无法定时移除以及播放
  • 录像生存时间: 可以修改media.record-day来修改录像生存时间,单元是天;
  保证如下设置即可:
  1. # [根据业务需求配置]
  2. user-settings:
  3.     # 国标是否录制
  4.     record-sip: true
复制代码
在国标设备页面设置开启音频,然后播放,此时会在ZLMediaKit相应目录下录制文件.
比方:
  1. /home/multimedia/gb28181/wvp_zlm_platform/ZLMediaKit/release/linux/Debug/www/record/rtp
  2. tree
  3. .
  4. ├── 32050950002000005065_32050950002000005061
  5. │   └── 2024-10-28
  6. │       ├── 15-42-12-0.mp4
  7. │       └── 15-44-26-0.mp4
  8. ├── 32050950002000005065_32050950002000005062
  9. │   └── 2024-10-28
  10. │       └── 15-44-00-0.mp4
  11. ├── 32050950002000005065_32050950002000005063
  12. │   └── 2024-10-28
  13. │       └── 15-44-40-0.mp4
  14. └── 32050950002000005067_32050950001320418045
  15.     └── 2024-10-28
  16.         └── 15-36-13-0.mp4
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

怀念夏天

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表