写点什么

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

作者:anyRTC开发者
  • 2022 年 6 月 23 日
  • 本文字数:5983 字

    阅读完需:约 20 分钟

介绍

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 -versionjava 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 -versionApache 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 -p123456MariaDB [(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: 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        # mysql数据源    datasource:        type: com.alibaba.druid.pool.DruidDataSource        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: root        password: 123456        druid:            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:wall            useGlobalDataSourceStat: 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: # [必须修改] 本机的IP ip: 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服务器的内网IP ip: 192.168.1.13 # [必须修改] zlm服务器的http.port http-port: 80 # [可选] zlm服务器的hook.admin_params=secret secret: 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/functionselif [ -f /etc/rc.d/init.d/functions ]; then  . /etc/rc.d/init.d/functionselse  echo -e "\aJnice: unable to locate functions lib. Cannot continue."  exit 0fi
ulimit -n 65000echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range
## jar文件名称export JAVA_HOME=/usr/lib/jvm/java-1.8.0export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/ export PATH=$PATH:$JAVA_HOME/binJAR_HOME=/usr/local/wvp-GB28181-pro/targetJAR_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 ]; then echo -n "wvp_pro process [${prog}] already running" echo_failure echo return 1 fi
if [ ! -f ${JAR_HOME}/${JAR_NAME} ]; then echo -n "wvp_pro binary [${prog}] not found." echo_failure echo return 1 fi
echo -n "starting service (wvp_pro): " cd ${JAR_HOME} nohup java -jar ${JAR_HOME}/${JAR_NAME} > /dev/null 2>&1 & retval=$? if [ ${retval} == 0 ]; then echo_success echo else echo_failure echo break fi sleep 1
return 0}
#---------------------------------------------------------------------------# STOP#---------------------------------------------------------------------------Stop(){ echo -n "stopping service (wvp_pro): " kill -9 $wvp_pro echo return 0}
#---------------------------------------------------------------------------# MAIN#---------------------------------------------------------------------------case "$1" in start) Start ;; stop) Stop ;; restart) Stop sleep 3 Start ;; *) echo "please use : $0 {start|stop|restart}"esac
exit
复制代码


[root@localhost target]# crontab -l*/1 * * * * sh /usr/local/wvp-GB28181-pro/target/wvp-pro.sh  start  >/dev/null 2>&1
复制代码



发布于: 刚刚阅读数: 4
用户头像

实时交互,万物互联! 2020.08.10 加入

实时交互,万物互联,全球实时互动云服务商领跑者!

评论

发布
暂无评论
技术分享| WVP+ZLMediaKit实现摄像头GB28181推流播放_音视频_anyRTC开发者_InfoQ写作社区