说明
前段时间发布了一系列GB28181测试情况的搭建,近来整理一下服务器和模拟设备一个完备的博客,不须要设备就可以熟悉GB28181协议.
安装
主机发起使用Ubuntu 22.04.5 LTS x86_64及以上版本.
1.安装nodejs
简介
到nodejs官网下载最新LTS版本. 因为nodejs依赖glic库,所以ubuntu使用最新的LTS版本.
当前nodejs依赖glibc2.28版本,为了确保nodejs能正常运行,须要先查询体系的glibc版本.
- strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_
- #输出如下信息
- ......
- GLIBC_2.27
- GLIBC_2.28
- GLIBC_2.29
- GLIBC_2.30
- GLIBC_2.31
- GLIBC_2.32
- GLIBC_2.33
- GLIBC_2.34
- GLIBC_2.35
复制代码 安装步骤
- #解压缩
- tar -Jxf node-v20.9.0-linux-x64.tar.xz
- #移动位置
- sudo mv node-v20.9.0-linux-x64/ /opt
- #编辑/etc/profile内容
- export PATH="/opt/node-v20.9.0-linux-x64/bin:$PATH"
- #使环境变量使能
- source /etc/profile
- #查看nodejs是否正常安装
- node -v
- v20.9.0
- npm -v
- 10.1.0
复制代码 2.安装java情况
- sudo apt install -y openjdk-11-jre maven
- #确认java安装成功
- java -version
- #输出版本信息
- openjdk 11.0.21 2023-10-17
- OpenJDK Runtime Environment (build 11.0.21+9-post-Ubuntu-0ubuntu122.04)
- OpenJDK 64-Bit Server VM (build 11.0.21+9-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)
- #maven
- mvn -version
- Apache Maven 3.6.3
- Maven home: /usr/share/maven
- Java version: 11.0.24, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
- Default locale: en_US, platform encoding: UTF-8
- OS name: "linux", version: "6.5.0-18-generic", arch: "amd64", family: "unix"
复制代码 3.安装mysql
安装
- #移除以前的mysql相关
- sudo apt remove --purge mysql-\*
- #安装mysql
- sudo apt install mysql-server mysql-client
- #查看是否启动
- systemctl status mysql
- #手动启动
- systemctl start mysql
- #查看mysql版本
- mysql --version
复制代码 修改暗码
- #免密进入mysql
- sudo mysql -uroot
- #your_new _password 修改成用户密码
- alter user 'root'@'localhost' identified with mysql_native_password by 'your_new _password';
- #然后就可以使用密码登录了
- mysql -u root -p
- use mysql;
- #root账号可以访问所有主机
- update user set host='%' where user= 'root';
- #ERROR 1046 (3D000): No database selected
- flush privileges;
- #授权
- grant all on *.* to 'root'@'%';
- flush privileges;
- quit;
复制代码 4.安装redis
- sudo apt update
- sudo apt install redis-server
- #启动
- redis-server
- #查看Redis是否正常
- systemctl status redis
- redis-cli
- #输入ping返回PONG表示正常
复制代码 5.安装编译器
- sudo apt install build-essential
- g++ --version
- g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
- Copyright (C) 2021 Free Software Foundation, Inc.
- This is free software; see the source for copying conditions. There is NO
- 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内部的资料.
- tar -zxvf cmake-3.27.8-linux-x86_64.tar.gz
- sudo mv cmake-3.27.8-linux-x86_64 /opt/
- sudo vim /etc/profile
- #增加
- export PATH="/opt/cmake-3.27.8-linux-x86_64/bin:$PATH"
- source /etc/profile
- cmake --version
- #显示安装成功
- cmake version 3.27.8
- CMake suite maintained and supported by Kitware (kitware.com/cmake).
复制代码 /opt/cmake-3.27.8-linux-x86_64/doc/cmake/html为网页资助文档.
7.安装依赖库
- sudo apt install -y libssl-dev
- sudo apt install -y libsdl1.2-dev
- sudo apt install -y libavcodec-dev
- sudo apt install -y libavutil-dev
- sudo apt install -y ffmpeg
复制代码 8.编译ZLMediaKit
- git clone https://gitee.com/xia-chu/ZLMediaKit
- cd ZLMediaKit
- git submodule update --init
- git submodule status
- 08c094ea14f259ecf0c356e6243cb47ee96ce292 3rdpart/ZLToolKit (heads/master)
- 69098a18b9af0c47549d9a271c054d13ca92b006 3rdpart/jsoncpp (1.9.0-178-g69098a18)
- cf83ebc62e65ae6f3b73bc5ebd06cb0b2da49fa5 3rdpart/media-server (v1.0.0-173-gcf83ebc6)
- b02d2a4c1abf95db45e50bb77d789defa0fcc4b7 www/webassist (heads/main)
- #编译
- mkdir build
- cd build
- cmake ..
- make -j4
复制代码 编译效果在release目录下,主要有三部门构成:
- MediaServer 历程
- cd ZLMediaKit/release/linux/Debug
- #通过-h可以了解启动参数
- ./MediaServer -h
复制代码 - c api 的 SDK
- 头文件在ZLMediaKit/api/include
- 库文件为:ZLMediaKit/release/linux/Debug/libmk_api.so
复制代码
相关代码在ZLMediaKit/tests目录下,你可以对照代码启动测试历程。
9.编译wvp-GB28181-pro
- git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git
- #1.编译前端页面
- cd wvp-GB28181-pro/web_src/
- npm --registry=https://registry.npmmirror.com install
- npm run build
- #编译完成后会生成目录: wvp-GB28181-pro/src/main/resources/static
- #2.生成可执行jar
- cd wvp-GB28181-pro
- mvn package
- #编译后生成文件: wvp-GB28181-pro/target/wvp-pro-2.7.3-10250742.jar
- #3.生成war
- cd wvp-GB28181-pro
- mvn package -P war
- #编译后生成文件: wvp-GB28181-pro/target/wvp-pro-2.7.3-10250742.war
复制代码 配置
目录结构如下
- .
- ├── config #配置文件
- ├── record #录像保存
- ├── wvp-GB28181-pro
- └── ZLMediaKit
复制代码 把所有的配置文件放到config目录中
- cp wvp-GB28181-pro/target/classes/配置详情.yml config
- cp ZLMediaKit/release/linux/Debug/config.ini config
复制代码 终极config目录内容如下:
- config
- ├── wvp_gb28181.sh #wvp-GB28181-pro运行脚本
- ├── wvp_gb28181.yml #wvp-GB28181-pro配置文件
- ├── ZLMediaKit.ini #ZLMediaKit配置文件
- └── ZLMediaKit.sh #ZLMediaKit运行脚本
复制代码 1.ZLMediaKit配置
- [api]
- #和 wvp_gb28181.yml 中 media:secret: 一致
- secret=BkPj2ca6QPpY5RccREJq4kAOu9ZEt70x
- [general]
- #和 wvp_gb28181.yml 中 media:id: 一致
- mediaServerId=FQ3TF8yT83wh5Wvz
- [http]
- #和 wvp_gb28181.yml 中 media:http-port: 一致
- port=80
-
- [rtp_proxy]
- #和 wvp_gb28181.yml 中 media:rtp:port-range: 一致
- port_range=30000-35000
复制代码 2.wvp-GB28181-pro配置
2.1.配置ZLMediaKit连接信息
- media:
- #和ZLMediaKit设置一致
- secret: BkPj2ca6QPpY5RccREJq4kAOu9ZEt70x
- id: FQ3TF8yT83wh5Wvz
- http-port: 80
- rtp:
- port-range: 30000,30500
-
- # [必须修改] zlm服务器的内网IP
- ip: 192.168.137.2
- hook-ip: 192.168.137.2
复制代码 2.2.28181服务器的配置
- sip:
- ip: 192.168.137.2
- # [可选] 没有任何业务需求,仅仅是在前端展示的时候用
- show-ip: 192.168.137.2
- # [可选] 28181服务监听的端口
- port: 5061
- # [可选]
- domain: Local1
- # [可选]
- id: 32050950002000005001
- # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验
- password: eLTE@com123
复制代码 2.3.配置web服务器
- #web访问
- server:
- port: 18080
复制代码 2.4.数据库配置
2.4.1.修改root用户的暗码
- #查看数据库状态
- systemctl status mysql
- #进入mysql
- mysql -u root -p
- #更改root用户密码为root123,并修改为root用户可以使用任何电脑访问所有数据库
- use mysql;
- update user set host='%' where user= 'root';
- flush privileges;
- select host,user,plugin from user where user='root';
- alter user 'root'@'%' identified with mysql_native_password by 'root123';
- flush privileges;
- grant all on *.* to 'root'@'%';
- flush privileges;
复制代码 2.4.2.删除以前wvp相关数据库
- #显示所有数据库
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- | wvp |
- | wvp2 |
- +--------------------+
- 6 rows in set (0.00 sec)
- #显示当前数据库
- select database();
- +------------+
- | database() |
- +------------+
- | mysql |
- +------------+
- 1 row in set (0.00 sec)
- #删除wvp相关数据库
- mysql> drop database wvp;
- Query OK, 17 rows affected (0.32 sec)
- mysql> drop database wvp2;
- Query OK, 0 rows affected (0.01 sec)
复制代码 2.4.3.删除mysql数据库中wvp相关表格
- #显示mysql数据库中所有表格
- mysql> show tables;
- +------------------------------------------------------+
- | Tables_in_mysql |
- +------------------------------------------------------+
- | columns_priv |
- | component |
- | db |
- | default_roles |
- | engine_cost |
- | func |
- | general_log |
- | global_grants |
- | gtid_executed |
- | help_category |
- | help_keyword |
- | help_relation |
- | help_topic |
- | innodb_index_stats |
- | innodb_table_stats |
- | password_history |
- | plugin |
- | procs_priv |
- | proxies_priv |
- | replication_asynchronous_connection_failover |
- | replication_asynchronous_connection_failover_managed |
- | replication_group_configuration_version |
- | replication_group_member_actions |
- | role_edges |
- | server_cost |
- | servers |
- | slave_master_info |
- | slave_relay_log_info |
- | slave_worker_info |
- | slow_log |
- | tables_priv |
- | time_zone |
- | time_zone_leap_second |
- | time_zone_name |
- | time_zone_transition |
- | time_zone_transition_type |
- | user |
- | wvp_cloud_record |
- | wvp_device |
- | wvp_device_alarm |
- | wvp_device_channel |
- | wvp_device_mobile_position |
- | wvp_gb_stream |
- | wvp_log |
- | wvp_media_server |
- | wvp_platform |
- | wvp_platform_catalog |
- | wvp_platform_gb_channel |
- | wvp_platform_gb_stream |
- | wvp_resources_tree |
- | wvp_stream_proxy |
- | wvp_stream_push |
- | wvp_user |
- | wvp_user_role |
- +------------------------------------------------------+
- 54 rows in set (0.00 sec)
- #删除wvp相关表格
- drop table wvp_cloud_record;
- drop table wvp_device;
- drop table wvp_device_alarm;;
- drop table wvp_device_channel;
- drop table wvp_device_mobile_position;
- drop table wvp_gb_stream;
- drop table wvp_log;
- drop table wvp_media_server;
- drop table wvp_platform;
- drop table wvp_platform_catalog;
- drop table wvp_platform_gb_channel;
- drop table wvp_platform_gb_stream;
- drop table wvp_resources_tree;
- drop table wvp_stream_proxy;
- drop table wvp_stream_push;
- drop table wvp_user;
- drop table wvp_user_role;
复制代码 2.4.4.数据库连接配置修改
原来的
- dynamic:
- primary: master
- datasource:
- master:
- type: com.zaxxer.hikari.HikariDataSource
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://127.0.0.1:3306/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
- username: root
- password: root123
- hikari:
- connection-timeout: 20000 # 是客户端等待连接池连接的最大毫秒数
- initialSize: 50 # 连接池初始化连接数
- maximum-pool-size: 200 # 连接池最大连接数
- minimum-idle: 10 # 连接池最小空闲连接数
- idle-timeout: 300000 # 允许连接在连接池中空闲的最长时间(以毫秒为单位)
- max-lifetime: 1200000 # 是池中连接关闭后的最长生命周期(以毫秒为单位)
- share:
- type: com.zaxxer.hikari.HikariDataSource
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://127.0.0.1:3306/wvp269_1?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
- username: root
复制代码 修改为
- dynamic:
- primary: master
- datasource:
- master:
- type: com.zaxxer.hikari.HikariDataSource
- driver-class-name: com.mysql.cj.jdbc.Driver
- url: jdbc:mysql://127.0.0.1:3306/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
- username: root
- password: root123
- hikari:
- connection-timeout: 20000 # 是客户端等待连接池连接的最大毫秒数
- initialSize: 50 # 连接池初始化连接数
- maximum-pool-size: 200 # 连接池最大连接数
- minimum-idle: 10 # 连接池最小空闲连接数
- idle-timeout: 300000 # 允许连接在连接池中空闲的最长时间(以毫秒为单位)
- max-lifetime: 1200000 # 是池中连接关闭后的最长生命周期(以毫秒为单位)
复制代码 2.4.5.建立并导入数据库
- #复制数据库
- cp wvp-GB28181-pro/数据库/2.7.3/初始化-mysql-2.7.3.sql config/mysql.sql
复制代码- create DATABASE wvp2;
- use wvp2;
- source /home/multimedia/gb28181/wvp_zlm_platform/config/mysql.sql;
- flush privileges;
- exit
复制代码 2.5.跨域配置
- # [根据业务需求配置]
- user-settings:
- # 跨域配置,不配置此项则允许所有跨域请求,配置后则只允许配置的页面的地址请求, 可以配置多个
- allowed-origins:
- - http://localhost:8008
- - http://192.168.137.2:8008
复制代码 运行
准备运行脚本
ZLMediaKit.sh
- WVP_ZLM_PLATFORM_PATH=/home/multimedia/gb28181/wvp_zlm_platform
- ZLMEDIAKIT_MEDIASERVER=${WVP_ZLM_PLATFORM_PATH}/ZLMediaKit/release/linux/Debug/MediaServer
- ZLMEDIAKIT_CONFIG_FILE=${WVP_ZLM_PLATFORM_PATH}/config/ZLMediaKit.ini
- sudo ${ZLMEDIAKIT_MEDIASERVER} -c ${ZLMEDIAKIT_CONFIG_FILE}
复制代码 wvp_gb28181.sh
- WVP_ZLM_PLATFORM_PATH=/home/multimedia/gb28181/wvp_zlm_platform
- WVP_GB28181_JAR=${WVP_ZLM_PLATFORM_PATH}/wvp-GB28181-pro/target/wvp-pro-2.7.3-10250742.jar
- WVP_GB28181_CONFIG_FILE=${WVP_ZLM_PLATFORM_PATH}/config/wvp_gb28181.yml
- sudo java -jar ${WVP_GB28181_JAR} --spring.config.location=${WVP_GB28181_CONFIG_FILE}
复制代码 运行服务
每个脚本须要一个终端窗口
- #需要先运行ZLMediaKit
- ZLMediaKit.sh
- #测试
- http://192.168.137.2/
- https://192.168.137.2/webassist/?secret=BkPj2ca6QPpY5RccREJq4kAOu9ZEt70x
- https://192.168.137.2/webrtc
- #然后运行wvp_gb28181
- ./wvp_gb28181.sh
- #测试
- http://192.168.137.2:18080/#/login
- #用户名: admin
- #密码: admin
复制代码 使用国标设备对接国标服务器
大概手头没有国标设备,为了方便验证国标服务器是否搭建成功,这里使用国标模拟设备进行对接测试.国标模拟设备选择 http://happytimesoft.com/的国标模拟设备,下载所在为 http://happytimesoft.com/products/gb28181-device/index.html,支持windows x86,windows x64, linux,andorid等,这里使用windows x64版本.
下载后解压修改配置文件gb28181device.cfg,其他保持不变.
- <?xml version="1.0" encoding="utf-8"?>
- <config>
- <server_ip>192.168.137.2</server_ip>
- <server_port>5061</server_port>
- <server_id>32050950002000005001</server_id>
- <server_domain>Local1</server_domain>
- <device_id>32050950002000005067</device_id>
- <device_name>myTestDevice</device_name>
- <password>eLTE@com123</password>
- <channel>
- <cid>32050950001320418045</cid>
- <cname>myTestCh1</cname>
- </channel>
- </config>
复制代码 双击GB28181Device.exe运行国标模拟设备,在国标设备页面表现出设备
虚拟设备控制台表现如下信息说明注册成功
- Happytime GB28181 Device V7.0
- Registering to the platform 192.168.137.2
- sip_ntf_cb, evt : PUEVT_REGING
- sip server date : 2024-10-28T14:58:32.148
- 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来修改录像生存时间,单元是天;
保证如下设置即可:
- # [根据业务需求配置]
- user-settings:
- # 国标是否录制
- record-sip: true
复制代码 在国标设备页面设置开启音频,然后播放,此时会在ZLMediaKit相应目录下录制文件.
比方:
- /home/multimedia/gb28181/wvp_zlm_platform/ZLMediaKit/release/linux/Debug/www/record/rtp
- tree
- .
- ├── 32050950002000005065_32050950002000005061
- │ └── 2024-10-28
- │ ├── 15-42-12-0.mp4
- │ └── 15-44-26-0.mp4
- ├── 32050950002000005065_32050950002000005062
- │ └── 2024-10-28
- │ └── 15-44-00-0.mp4
- ├── 32050950002000005065_32050950002000005063
- │ └── 2024-10-28
- │ └── 15-44-40-0.mp4
- └── 32050950002000005067_32050950001320418045
- └── 2024-10-28
- └── 15-36-13-0.mp4
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |