当前位置: 首页 > news >正文

Ubuntu搭建国标平台wvp-GB28181-pro

目录

  • 简介
  • 安装和编译
    • 1.查看操作系统信息
    • 2.安装最新版的nodejs
    • 3.安装java环境
    • 4.安装mysql
    • 5.安装redis
    • 6.安装编译器
    • 7.安装cmake
    • 8.安装依赖库
    • 9.编译ZLMediaKit
      • 9.1.编译结果说明
    • 10.编译wvp-GB28181-pro
      • 10.1.编译结果说明
  • 配置
    • 1.WVP-PRO配置文件
      • 1.1.Mysql数据库配置
      • 1.2.REDIS数据库配置
      • 1.3.配置服务启动端口
      • 1.4.配置28181相关信息
      • 1.5.配置ZLMediaKit连接信息
      • 1.6.个性化定制信息配置
    • 2.ZLMediaKit配置文件
      • 2.1.文件使用
      • 2.1.配置
  • 运行测试
    • 1.运行ZLMediaKit
      • 1.1.ZLMediaKit测试命令
    • 2.运行wvp-GB28181-pro
      • 2.1.测试命令
    • 3.添加GB28181设备模拟器
  • 参考资料

简介

官网wvp-GB28181-pro: https://doc.wvp-pro.cn/#/

流媒体服务器: https://github.com/ZLMediaKit/ZLMediaKit

WVP-PRO使用Spring boot开发,maven管理依赖。

参考官网既可安装部署.

为了方便搭建,开源软件以后修改可能导致配置失败,把ZLMediaKit和wvp-GB28181-pro配置文件和项目commit ID记录到仓库中.

https://gitee.com/fedorayang/wvp-gb28181-pro_-zlmedia-kit_config.git

安装和编译

Ubuntu 22.04.3 LTS为例

1.查看操作系统信息

lsb_release -a
#输出一下信息
LSB Version:    core-11.1.0ubuntu4-noarch:security-11.1.0ubuntu4-noarch
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:        22.04
Codename:       jammy

2.安装最新版的nodejs

参考 ubuntu安装nodejs环境: https://blog.csdn.net/fedorayang/article/details/135837204

3.安装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)

4.安装mysql

mysql如果以前安装过其他数据库可能存在冲突,需要完全卸载后安装,具体安装步骤参考 myql入门: https://blog.csdn.net/fedorayang/article/details/135847981

5.安装redis

sudo apt update
sudo apt install redis-server#启动
redis-server#查看Redis是否正常
systemctl status redis
redis-cli
#输入ping返回PONG表示正常

6.安装编译器

sudo apt install build-essential

7.安装cmake

参考文章 cmake入门: https://blog.csdn.net/fedorayang/article/details/134513536

8.安装依赖库

#除了openssl,其他其实都可以不安装
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

9.编译ZLMediaKit

git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
git submodule update --init
#编译
mkdir build
cd build
cmake ..
make -j4

9.1.编译结果说明

编译结果在release目录下,主要有三部分组成:

  • MediaServer 进程

    cd ZLMediaKit/release/linux/Debug
    #通过-h可以了解启动参数
    ./MediaServer -h
    
  • c api 的 SDK

头文件在ZLMediaKit/api/include
库文件为:ZLMediaKit/release/linux/Debug/libmk_api.so
  • test_开头的测试程序

相关代码在ZLMediaKit/tests目录下,你可以对照代码启动测试进程。

10.编译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.0-01260305.jar#3.生成war
cd wvp-GB28181-pro
mvn package -P war
#编译后生成文件: wvp-GB28181-pro/target/wvp-pro-2.7.0-01260312.war

10.1.编译结果说明

最终编译生成的结果在wvp-GB28181-pro/target目录,内容如下:
在这里插入图片描述

配置

有两个配置文件:1.WVP-PRO配置文件;2.ZLMediaKit配置文件.

1.WVP-PRO配置文件

./src/main/resources/application.yml
./target/classes/application.yml
./target/wvp-pro-2.7.0-01260312/WEB-INF/classes/application.yml./src/main/resources/all-application.yml
./target/classes/all-application.yml
./target/wvp-pro-2.7.0-01260312/WEB-INF/classes/all-application.yml

如上all-application.yml,application.yml使用哪一组都可以,这里使用all-application.yml进行修改.

1.1.Mysql数据库配置

这里有两点注意:

  • share数据库删除
  • master数据库wvp2需要修改为wvp,必须要和建立的数据库名称对应
# [必选] jdbc数据库配置
datasource:# mysql配置dynamic:primary: masterdatasource:master:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=trueusername: rootpassword: root123hikari:connection-timeout: 20000             # 是客户端等待连接池连接的最大毫秒数initialSize: 50                       # 连接池初始化连接数maximum-pool-size: 200                # 连接池最大连接数minimum-idle: 10                       # 连接池最小空闲连接数idle-timeout: 300000                  # 允许连接在连接池中空闲的最长时间(以毫秒为单位)max-lifetime: 1200000                 # 是池中连接关闭后的最长生命周期(以毫秒为单位)

MySQL设置

#查看数据库状态
systemctl status mysql
#进入mysql
mysql -u root -p#mysql更改
use mysql;
update user set host='%' where user= 'root';
flush privileges;
select host,user,plugin from user where user='root';
#更改root用户密码为root123,参考上面的配置
alter user 'root'@'%' identified with mysql_native_password by 'root123';
flush privileges;
grant all on *.* to 'root'@'%';
flush privileges;#wvp数据库修改,需要和url: jdbc:mysql://127.0.0.1:3306/wvp?对应
create DATABASE wvp;
use wvp;
source /home/multimedia/gb28181/wvp-GB28181-pro/数据库/初始化-mysql.sql
flush privileges;
exit

1.2.REDIS数据库配置

1.3.配置服务启动端口

# [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
server:port: 18080

1.4.配置28181相关信息

sip:#SIP信令服务器IP地址ip: 0.0.0.0port: 5060domain: 4401020049id: 44010200492000000001password: admin123

1.5.配置ZLMediaKit连接信息

#zlm 默认服务器配置
media:# ZLMediaKit的服务ID,必须配置id: FQ3TF8yT83wh5Wvz# [必须修改] zlm服务器的内网IP,sdp-ip与stream-ip使用默认值的情况下,这里不要使用127.0.0.1/0.0.0.0ip: 192.168.1.3# [必须修改] zlm服务器的http.porthttp-port: 80       # [可选] 返回流地址时的ip,置空使用 media.ip#stream-ip:# [可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.ip#sdp-ip:# [可选] zlm服务器的hook所使用的IP, 默认使用sip.ip#hook-ip:  # [可选] 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服务器的hook.admin_params=secretsecret: BkPj2ca6QPpY5RccREJq4kAOu9ZEt70x# 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试rtp:# [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输enable: true# [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功port-range: 30000,35000 # 端口范围# [可选] 国标级联在此范围内选择端口发送媒体流,请不要与收流端口范围重合send-port-range: 35002,35006 # 端口范围    
  • id必须和2.1.配置中general.mediaServerId设置一致
  • ip必须正确设置
  • http-port和2.1.配置中http.port相同
  • secret和2.1.配置中api.secret相同
  • rtp和2.1.配置中rtp_proxy.rtp_proxy相同

1.6.个性化定制信息配置

# [根据业务需求配置]
user-settings:# [可选] 服务ID,不写则为000000#server-id:

2.ZLMediaKit配置文件

2.1.文件使用

./release/linux/Debug/config.ini
./conf/config.ini#默认使用./release/linux/Debug/config.ini#修改并保存配置文件后,运行如下命令就能使ZLMediaKit热加载配置文件,而不必先关闭服务然后再开启
killall -1 MediaServer`

2.1.配置

[api]#一些比较敏感的http api在访问时需要提供secret,否则无权限调用#如果是通过127.0.0.1访问,那么可以不提供secretsecret=BkPj2ca6QPpY5RccREJq4kAOu9ZEt70x[general]#服务器唯一id,用于触发hook时区别是哪台服务器mediaServerId=FQ3TF8yT83wh5Wvz[http]#http服务器监听端口port=80[rtp_proxy]#随机端口范围,最少确保36个端口#该范围同时限制rtsp服务器udp端口范围port_range=30000-35000	
  • mediaServerId需要和1.5.配置ZLMediaKit连接信息中的ID设置一致
  • secret需要和1.5.配置ZLMediaKit相同

运行测试

1.运行ZLMediaKit

cd ZLMediaKit/release/linux/Debug
sudo ./MediaServer -c /home/multimedia/gb28181/config/ZLMediaKitConfig.ini

1.1.ZLMediaKit测试命令

http://192.168.1.3/
http://192.168.1.3/webassist/?secret=BkPj2ca6QPpY5RccREJq4kAOu9ZEt70x
https://192.168.1.3/webrtc/

2.运行wvp-GB28181-pro

cd wvp-GB28181-pro/target
#测试命令
sudo java -jar wvp-pro-*.jar --spring.config.location=/home/multimedia/gb28181/config/wvp-GB28181-pro-config.yml

2.1.测试命令

curl localhost:18080http://192.168.1.3:18080/#/login
#用户名: admin
#密码: admin

3.添加GB28181设备模拟器

国标gb28181模拟环境搭建: https://blog.csdn.net/fedorayang/article/details/135498173

1.4.配置28181相关信息

<?xml version="1.0" encoding="utf-8"?>
<config><server_ip>192.168.1.3</server_ip><server_port>5060</server_port><server_id>44010200492000000001</server_id><server_domain>4401020049</server_domain><password>admin123</password><protocol>udp</protocol>
</config>

其他配置项默认.

设备模拟器配置好后,启动wvp-GB28181-pro自动识别到设备.
在这里插入图片描述
流传输模式:UDP,TCP被动模式最常用.

参考资料

国标gb28181保姆级入门教程: https://blog.csdn.net/fedorayang/article/details/135499219

全网首发 开源28181 国产开源系统openeuler 编译ZLMediaKit wvp-GB28181-pro: https://www.bilibili.com/video/BV1hA4y1S7Gw?vd_source=a795ec50b290a151c69819df1d6cb37a

相关文章:

Ubuntu搭建国标平台wvp-GB28181-pro

目录 简介安装和编译1.查看操作系统信息2.安装最新版的nodejs3.安装java环境4.安装mysql5.安装redis6.安装编译器7.安装cmake8.安装依赖库9.编译ZLMediaKit9.1.编译结果说明 10.编译wvp-GB28181-pro10.1.编译结果说明 配置1.WVP-PRO配置文件1.1.Mysql数据库配置1.2.REDIS数据库…...

LC 2808. 使循环数组所有元素相等的最少秒数

2808. 使循环数组所有元素相等的最少秒数 难度: 中等 题目大意&#xff1a; 给你一个下标从 0 开始长度为 n 的数组 nums 。 每一秒&#xff0c;你可以对数组执行以下操作&#xff1a; 对于范围在 [0, n - 1] 内的每一个下标 i &#xff0c;将 nums[i] 替换成 nums[i] &…...

Qt|大小端数据转换

后面打算写Qt关于网络编程的博客&#xff0c;网络编程就绕不开字节流数据传输&#xff0c;字节流数据的传输一般是根据协议来定义对应的报文该如何组包&#xff0c;那这就必然牵扯到了大端字节序和小端字节序的问题了。不清楚的大小端的可以看一下相关资料&#xff1a;大小端模…...

禅道添加自定义字段

1&#xff0c;数据库表 zt_story 添加自定义字段 bakDate1&#xff0c;bakDate2&#xff0c;bakDate3&#xff0c;bakDate4 2&#xff0c;在 /opt/lampp/htdocs/zentaopms/extension/custom/story/ext/config 中添加bakDate.php文件 <?php $config->story->datatab…...

蓝桥杯2024/1/26笔记-----基于PCF8591的电压采集装置

功能实现要求&#xff1a; 每次建好工程文件夹&#xff0c;里边包含User&#xff08;放工程文件&#xff0c;mian.c&#xff0c;可以在这里写如同我这个文章的文本文档&#xff09;、Driver&#xff08;存放底层文件如Led.c&#xff0c;Led.h等&#xff09; 新建的工程先搭建框…...

【一】esp32芯片开发板环境搭建

1、esp32的源码在github上的地址 不同的芯片支持的源码版本不一样&#xff0c;需要根据自己的实际的esp32开发板的芯片下载不用版本的代码 esp32支持多种开发方式&#xff0c;如arduino&#xff0c;ESP-IDF等。官方推荐使用idf开发&#xff0c;ESP-IDF 是乐鑫官方推出的物联网开…...

PyTorch2ONNX-分类模型:速度比较(固定维度、动态维度)、精度比较

图像分类模型部署: PyTorch -> ONNX 1. 模型部署介绍 1.1 人工智能开发部署全流程 #mermaid-svg-bAJun9u4XeSykIbg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bAJun9u4XeSykIbg .error-icon{fill:#552222;}…...

Docker命令快车道:一票通往高效开发之旅

欢迎登上 Docker 命令快车&#xff01;在这趟旅程中&#xff0c;你不仅会学会如何驾驭 Docker 这辆神奇的车&#xff0c;还会发现如何让你的开发旅程变得更加轻松愉快。现在&#xff0c;请系好安全带&#xff0c;我们即将出发&#xff01; Docker 是什么 Docker 就像是一辆超…...

IP类接口大全,含免费次数

IP查询 IP归属地-IPv4高精版&#xff1a;根据IP地址查询归属地信息&#xff0c;支持到中国地区&#xff08;不含港台地区&#xff09;街道级别&#xff0c;包含国家、省、市、区县、详细地址和运营商等信息。IP归属地-IPv4区县级&#xff1a;根据IP地址查询归属地信息&#xf…...

LLMs 的记忆和信息检索服务器 Motorhead

LLMs 的记忆和信息检索服务器 Motorhead 1. 为什么使用 Motorhead&#xff1f;2. 通过 Docker 启动 Motorhead3. Github 地址4. python 使用示例地址 1. 为什么使用 Motorhead&#xff1f; 使用 LLMs构建聊天应用程序时&#xff0c;每次都必须构建记忆处理。Motorhead是协助该…...

vue3项目中让echarts适应div的大小变化,跟随div的大小改变图表大小

目录如下 我的项目环境如下利用element-resize-detector插件监听元素大小变化element-resize-detector插件的用法完整代码如下&#xff1a;结果如下 在做项目的时候&#xff0c;经常会使用到echarts&#xff0c;特别是在做一些大屏项目的时候。有时候我们是需要根据div的大小改…...

springboot启动异常

Error creating bean with name ‘dataSource’ org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name dataSource: Unsatisfied dependency expressed through field basicProperties; nested exception is org.springframew…...

直播主播之互动率与促单

直播互动率是衡量直播间观众参与度的重要指标&#xff0c;通常指的是直播间的观众点赞、评论以及转发的数量。互动率越高&#xff0c;表明观众参与度越高&#xff0c;直播间的人气值也相应越高。 为了提升直播互动率&#xff0c;主播可以采取以下策略: 1.积极引导观众参与互动…...

Android 基础技术——Bitmap

笔者希望做一个系列&#xff0c;整理 Android 基础技术&#xff0c;本章是关于 Bitmap Bitmap 内存如何计算 占用内存 宽 * 缩放比例 * 高 * 缩放比例 * 每个像素所占字节 缩放比例 设备dpi/图片所在目录的dpi Bitmap加载优化&#xff1f;不改变图片质量的情况下怎么优化&am…...

数据结构奇妙旅程之七大排序

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …...

【JavaScript】Generator

MDN-Generator Generator对象由生成器函数返回&#xff0c;并且它符合可迭代协议和迭代器协议。 Generator-核心语法 核心语法: 定义生成器函数获取generator对象yield表达式的使用通过for of获取每一个yield的值 // 1. 通过function* 创建生成器函数 function* foo() {//…...

河南省考后天网上确认,请提前准备证件照哦

✔报名时间&#xff1a;2024年1月18号一1月24号 ✔报名确认和缴费&#xff1a;2024年1月 31号一2月4号 ✔准考证打印&#xff1a;2024年3月12号一3月17号 ✔笔试时间&#xff1a;2024年3月16日-2024年3月17日。 ✔面试时间&#xff1a;面试时间拟安排在2024年5月中旬 报名网址&…...

【前端】防抖和节流

防抖 防抖用于限制连续触发的事件的执行频率。当一个事件被触发时,防抖会延迟一定的时间执行对应的处理函数。如果在延迟时间内再次触发了同样的事件,那么之前的延迟执行将被取消,重新开始计时。 总结:在单位时间内频繁触发事件,只有最后一次生效 场景 :用户在输入框输…...

【网络】:网络套接字(UDP)

网络套接字 一.网络字节序二.端口号三.socket1.常见的API2.封装UdpSocket 四.地址转换函数 网络通信的本质就是进程间通信。 一.网络字节序 我们已经知道,内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分,网…...

Linux编程 1/2 数据结构

数据结构: 程序 数据结构 算法 1.数据结构: 1.时间复杂度: 数据量的增长与程序运行时间增长所呈现的比例函数,则称为时间渐进复杂度函数简称时间复杂度 O(c) > O(logn)> O(n) > O(nlogn) > O(n^2) > O(n^3) > O(2^n) 2.空间复杂度: 2.类…...

【UE Niagara】实现闪电粒子效果的两种方式

目录 效果 步骤 方式一&#xff08;网格体渲染器&#xff09; &#xff08;1&#xff09;添加网格体渲染器 &#xff08;2&#xff09;修改粒子显示方向 &#xff08;3&#xff09;添加从上到下逐渐显现的效果 &#xff08;4&#xff09;粒子颜色变化 方式二&#xff0…...

js数组/对象的深拷贝与浅拷贝

文章目录 一、js中的深拷贝和浅拷贝二、浅拷贝1、Object.assign()2、利用es6扩展运算符&#xff08;...&#xff09; 二、深拷贝1、JSON 序列化和反序列化2、js原生代码实现3、使用第三方库lodash等 四、总结 一、js中的深拷贝和浅拷贝 在JS中&#xff0c;深拷贝和浅拷贝是针对…...

HCIA学习第六天:OSPF:开放式最短路径优先协议

OSPF&#xff1a;开放式最短路径优先协议 无类别链路状态IGP动态路由协议 1.距离矢量协议&#xff1a;运行距离矢量协议的路由器会周期性的泛洪自己的路由表。通过路由的交互&#xff0c;每台路由器从相邻的路由器学习到路由&#xff0c;并且加载进自己的路由表中&#xff1b…...

从四个方面来解决企业在项目管理中遇到的各类问题

案例背景&#xff1a;某建筑集团有限公司成立于1949年&#xff0c;拥有国家房屋建筑工程施工总承包一级、建筑装修装饰工程专业承包一级、市政公用工程施工总承包一级资质。是一家集建筑施工、设备安装、装饰装潢、仿古建筑、房地产开发、建材试验为一体的具有综合生产能力的建…...

使用代码取大量2*2像素图片各通道均值,存于Excel文件中。

任务是取下图RGB各个通道的均值及标签&#xff08;R, G&#xff0c;B&#xff0c;Label&#xff09;,其中标签由图片存放的文件夹标识。由于2*2像素图片较多&#xff0c;所以将结果放置于Excel表格中&#xff0c;之后使用SVM对他们进行分类。 from PIL import Image import os …...

React16源码: React中commit阶段的commitBeforeMutationLifecycles的源码实现

commitBeforeMutationLifecycles 1 &#xff09;概述 在 react commit 阶段的 commitRoot 第一个while循环中调用了 commitBeforeMutationLifeCycles现在来看下&#xff0c;里面发生了什么 2 &#xff09;源码 回到 commit 阶段的第一个循环中&#xff0c;在 commitRoot 函数…...

压制二元组的总价值

压制二元组的总价值 对于每一个 a i a_i ai​, 看它能压制它前面的多少个元素, 那么它对总价值的贡献就是: 在a数组中: a i a_i ai​压制了x个数, 贡献为: x ∗ i x*i x∗i被 a i a_i ai​所压制的所有数在 a a a中的下标和为 y y y, 贡献为 − y -y −y 树状数组来求: 为了…...

【习题】保存应用数据

判断题 1. 首选项是关系型数据库。 错误(False) 2. 应用中涉及到Student信息&#xff0c;如包含姓名&#xff0c;性别&#xff0c;年龄&#xff0c;身高等信息可以用首选项来存储。 错误(False) 3. 同一应用或进程中每个文件仅存在一个Preferences实例。 正确(True) 单选题 …...

Flask框架小程序后端分离开发学习笔记《5》简易服务器代码

Flask框架小程序后端分离开发学习笔记《5》 Flask是使用python的后端&#xff0c;由于小程序需要后端开发&#xff0c;遂学习一下后端开发。 简易服务器代码 接口解析那一块很关键&#xff0c;学后端服务器这一块&#xff0c;感觉主要就是学习相应地址的接口怎么处理。 然后…...

“计算机视觉处理设计开发工程师”专项培训(第二期)

“人工智能技术与咨询” 发布...