技术分享| WVP+ZLMediaKit实现摄像头GB28181推流播放

2023-10-12 09:40

本文主要是介绍技术分享| WVP+ZLMediaKit实现摄像头GB28181推流播放,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

介绍

WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的开箱即用的网络视频平台,负责实现核心信令与设备管理后台部分,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR接入。支持国标级联,支持将不带国标功能的摄像机/直播流/直播推流转发到其他国标平台。

应用场景

  • 支持浏览器无插件播放摄像头视频。
  • 支持摄像机、平台、NVR等设备接入。 支持国标级联。
  • 支持rtsp/rtmp等视频流转发到国标平台。
  • 支持rtsp/rtmp等推流转发到国标平台。

服务部署

ZLMediaKit部署

下载地址: git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit

## 准备环境
[root@localhost artc]# yum install -y epel-release## gcc和yasm需要高版本  小编用的是gcc4.8.5 yasm1.2.0
[root@localhost artc]# yum -y install  yasm  gcc* 
[root@localhost artc]# yum -y install  openssl-devel  SDL-devel## 编译安装cmake 3.8.2
[root@localhost ~]# cd /home/artc
[root@localhost artc]# wget https://cmake.org/files/v3.8/cmake-3.8.2.tar.gz
[root@localhost artc]# tar zxvf cmake-3.8.2.tar.gz
[root@localhost artc]# cd cmake-3.8.2
[root@localhost cmake-3.8.2]# ./bootstrap
[root@localhost cmake-3.8.2]# gmake
[root@localhost cmake-3.8.2]# gmake install## 国内库比较快
[root@localhost ~]# cd  /usr/local/
[root@localhost local]# git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
[root@localhost local]# cd ZLMediaKit
#千万不要忘记执行这句命令
[root@localhost ZLMediaKit]# git submodule update --init## 编译安装
[root@localhost ZLMediaKit]# mkdir build
[root@localhost ZLMediaKit]# cmake .
[root@localhost ZLMediaKit]# make -j4## ZLMediaKit服务目录
[root@localhost ZLMediaKit]# cd release/linux/Debug

配置文件

[root@localhost Debug]# vim config.ini

[general]
mediaServerId=12345678  ##后面和WVP-PRO对接[hook]
admin_params=secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc   ##后面和WVP-PRO对接
## 程序启动
[root@localhost Debug]# ./MediaServer	   ## 前台启动
[root@localhost Debug]# ./MediaServer -d & ## 后台启动## 软连接
[root@localhost Debug]# ln -sf /home/ZLMediaKit/release/linux/Debug/MediaServer /usr/bin/
WVP-PRO部署

项目运行依赖redis、jdk1.8,打包依赖git、maven、nodejs、npm。

Redis部署
## 下载epel仓库
[root@localhost ~]# yum install epel-release -y## 下载redis数据库
[root@localhost ~]# yum install redis -y## 启动redis和设置开启自启动
[root@localhost ~]# systemctl start redis
[root@localhost ~]# systemctl enable redis
## 设置redis 远程连接和密码   (如果都在同一台机器上 不用这一步)
[root@localhost ~]# vim /etc/redis.conf
注释 #bind 127.0.0.1
修改 protected-mode no
修改 daemonize yes
修改 requirepass 123456## 关闭防火墙或者开放6379端口
[root@localhost ~]# systemctl stop firewalld  //关闭防火墙
[root@localhost ~]# firewall-cmd --zone=public --add-port=6379/tcp --permanent  //开放端口
[root@localhost ~]# firewall-cmd --reload	  //开放端口后 需要更新一下## 重启redis
[root@localhost ~]# systemctl restart redis
MySQL部署
[root@localhost ~]# yum -y install mariadb mariadb-server
[root@localhost ~]# systemctl enable mariadb
[root@localhost ~]# systemctl start mariadb
[root@localhost ~]# mysql -uroot 
mysql> set password = password('123456');
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;    //设置mysql外网连接密码
mysql> flush privileges;
JDK部署
[root@localhost ~]# tar zxvf jdk-8u121-linux-x64.tar.gz
[root@localhost ~]# mv jdk1.8.0_121/ /usr/local/jdk
[root@localhost ~]# vim /etc/profile
##末尾添加
export JAVA_HOME=/usr/local/jdk 
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/ 
export PATH=$PATH:$JAVA_HOME/bin
[root@localhost ~]# source /etc/profile
[root@localhost ~]# java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
Maven部署
[root@localhost ~]# tar zxvf apache-maven-3.5.0-bin.tar.gz
[root@localhost ~]# mv apache-maven-3.5.0 /usr/local/maven
[root@localhost ~]# vim /etc/profile
##末尾添加
export MAVEN_HOME=/usr/local/maven 
export PATH=$MAVEN_HOME/bin:$PATH
[root@localhost ~]# source /etc/profile
[root@localhost ~]# mvn -version
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: /usr/local/maven
编译WVP-PRO
## 安装依赖
[root@localhost ~]# yum -y install git nodejs npm## 下载源码
[root@localhost ~]# cd /usr/local
[root@localhost local]# git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git## 编译静态页面
[root@localhost ~]# cd /usr/local/wvp-GB28181-pro/web_src/
[root@localhost web_src]# npm --registry=https://registry.npm.taobao.org install
[root@localhost web_src]# npm run build## 打包项目, 生成可执行jar
[root@localhost web_src]# cd ..
[root@localhost wvp-GB28181-pro]# mvn package## 编译完成后在target目录下出现wvp-pro-x.x-xxxxxxxx.jar
## 导入MySQL文件
[root@localhost ~]# cd /usr/local/wvp-GB28181-pro/sql
[root@localhost sql]# mysql -uroot -p123456
MariaDB [(none)]> create database wvp;
MariaDB [(none)]> use wvp;
MariaDB [(none)]> source mysql.sql   ## 可能会出现字节错误  将mysql.sql里面的255字节修改小点 
## 配置文件修改
[root@localhost wvp-GB28181-pro]# mv src/main/resources/application-dev.yml  target/application.yml 
[root@localhost wvp-GB28181-pro]# vim target/application.yml
spring:# [可选]上传文件大小限制servlet:multipart:max-file-size: 10MBmax-request-size: 100MB# REDIS数据库配置redis:# [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1host: 127.0.0.1# [必须修改] 端口号port: 6379# [可选] 数据库 DBdatabase: 6# [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接password: # [可选] 超时时间timeout: 10000# mysql数据源datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-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: 123456druid:initialSize: 10                       # 连接池初始化连接数maxActive: 200                        # 连接池最大连接数minIdle: 5                            # 连接池最小空闲连接数maxWait: 60000                        # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。keepAlive: true                       # 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。validationQuery: select 1             # 检测连接是否有效sql,要求是查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。testWhileIdle: true                   # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。testOnBorrow: false                   # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。testOnReturn: false                   # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。poolPreparedStatements: false         # 是否開啟PSCache,並且指定每個連線上PSCache的大小timeBetweenEvictionRunsMillis: 60000  # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒minEvictableIdleTimeMillis: 300000    # 配置一個連線在池中最小生存的時間,單位是毫秒filters: stat,wall,slf4j             # 配置监控统计拦截的filters,监控统计用的filter:sta, 日志用的filter:log4j, 防御sql注入的filter:walluseGlobalDataSourceStat: true         # 合并多个DruidDataSource的监控数据# 通过connectProperties属性来打开mergeSql功能;慢SQL记录connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000#stat-view-servlet.url-pattern: /admin/druid/*#[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
server:port: 18080# 作为28181服务器的配置
sip:# [必须修改] 本机的IPip: 192.168.1.13# [可选] 28181服务监听的端口port: 5060# 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)# 后两位为行业编码,定义参照附录D.3# 3701020049标识山东济南历下区 信息行业接入# [可选]domain: 4401020049# [可选]id: 44010200492000000001# [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验password: admin123#zlm 默认服务器配置
media:id: 12345678	##ZLMediaKit配置的ID# [必须修改] zlm服务器的内网IPip: 192.168.1.13# [必须修改] zlm服务器的http.porthttp-port: 80# [可选] zlm服务器的hook.admin_params=secretsecret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc# 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试rtp:# [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输enable: true# [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功port-range: 30000,30500 # 端口范围# [可选] 国标级联在此范围内选择端口发送媒体流,send-port-range: 30000,30500 # 端口范围# 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用record-assist-port: 18081
# [可选] 日志配置, 一般不需要改
logging:config: classpath:logback-spring-local.xml# 版本信息, 不需修改
version:version: "@project.version@"description: "@project.description@"artifact-id: "@project.artifactId@"
## 启动WVP
[root@localhost wvp-GB28181-pro]#  cd target
[root@localhost target]#  java -jar wvp-pro-2.3.1-06151618.jar## 访问管理页面
http://192.168.1.13:18080
默认用户名:admin, 密码:admin
点击控制台--》媒体服务器配置--》有相关信息即可

自启动脚本

[root@localhost target]# cat wvp-pro.sh 
#!/bin/sh
##
if [ -f /etc/init.d/functions ]; then. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ]; then. /etc/rc.d/init.d/functions
elseecho -e "\aJnice: unable to locate functions lib. Cannot continue."exit 0
fiulimit -n 65000
echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range## jar文件名称
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/ 
export PATH=$PATH:$JAVA_HOME/bin
JAR_HOME=/usr/local/wvp-GB28181-pro/target
JAR_NAME=wvp-pro-2.3.1-06151618.jar## 过滤pid进程号
wvp_pro=`ps -ef|grep $JAR_NAME | grep -v grep | grep -v kill | awk '{print $2}'`#---------------------------------------------------------------------------
# START
#---------------------------------------------------------------------------
Start()
{if [ $tpid ]; thenecho -n "wvp_pro process [${prog}] already running"echo_failureechoreturn 1fiif [ ! -f ${JAR_HOME}/${JAR_NAME} ]; thenecho -n "wvp_pro binary [${prog}] not found."echo_failureechoreturn 1fiecho -n "starting service (wvp_pro): "cd ${JAR_HOME}nohup java -jar ${JAR_HOME}/${JAR_NAME}  > /dev/null 2>&1 &retval=$?if [ ${retval} == 0 ]; thenecho_successechoelseecho_failureechobreakfisleep 1return 0
}#---------------------------------------------------------------------------
# STOP
#---------------------------------------------------------------------------
Stop()
{echo -n "stopping service (wvp_pro): "kill -9 $wvp_proechoreturn 0
}#---------------------------------------------------------------------------
# MAIN
#---------------------------------------------------------------------------
case "$1" instart)Start;;stop)Stop;;restart)Stopsleep 3Start;;*)echo "please use : $0 {start|stop|restart}"
esacexit
[root@localhost target]# crontab -l
*/1 * * * * sh /usr/local/wvp-GB28181-pro/target/wvp-pro.sh  start  >/dev/null 2>&1

在这里插入图片描述

这篇关于技术分享| WVP+ZLMediaKit实现摄像头GB28181推流播放的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/194974

相关文章

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

golang版本升级如何实现

《golang版本升级如何实现》:本文主要介绍golang版本升级如何实现问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录golanwww.chinasem.cng版本升级linux上golang版本升级删除golang旧版本安装golang最新版本总结gola

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Mysql实现范围分区表(新增、删除、重组、查看)

《Mysql实现范围分区表(新增、删除、重组、查看)》MySQL分区表的四种类型(范围、哈希、列表、键值),主要介绍了范围分区的创建、查询、添加、删除及重组织操作,具有一定的参考价值,感兴趣的可以了解... 目录一、mysql分区表分类二、范围分区(Range Partitioning1、新建分区表:2、分

MySQL 定时新增分区的实现示例

《MySQL定时新增分区的实现示例》本文主要介绍了通过存储过程和定时任务实现MySQL分区的自动创建,解决大数据量下手动维护的繁琐问题,具有一定的参考价值,感兴趣的可以了解一下... mysql创建好分区之后,有时候会需要自动创建分区。比如,一些表数据量非常大,有些数据是热点数据,按照日期分区MululbU

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os