当前位置:网站首页>Technology sharing | wvp+zlmediakit realizes streaming playback of camera gb28181

Technology sharing | wvp+zlmediakit realizes streaming playback of camera gb28181

2022-06-23 12:43:00 InfoQ

Introduce

WEB VIDEO PLATFORM It's based on GB28181-2016 Standard out of the box network video platform , Responsible for the core signaling and equipment management background part , Support NAT through , Support Haikang 、 Dahua 、 Yushi and other brands IPC、NVR Access . Support national standard cascade , Support the camera without national standard function / Live streaming / Live streaming and forwarding to other national standard platforms .

Application scenarios

  • Support browser to play camera video without plug-in .
  • Support Cameras 、 platform 、NVR And other equipment access .  Support national standard cascade .
  • Support rtsp/rtmp Wait for the video stream to be forwarded to the national standard platform .
  • Support rtsp/rtmp Wait for the streaming to be forwarded to the national standard platform .

Service deployment

ZLMediaKit Deploy
Download address : git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit

##  Prepare the environment
[[email protected] artc]# yum install -y epel-release

## gcc and yasm Need a higher version   It's for small knitting gcc4.8.5 yasm1.2.0
[[email protected] artc]# yum -y install yasm gcc* 
[[email protected] artc]# yum -y install openssl-devel SDL-devel

##  Compilation and installation cmake 3.8.2
[[email protected] ~]# cd /home/artc
[[email protected] artc]# wget https://cmake.org/files/v3.8/cmake-3.8.2.tar.gz
[[email protected] artc]# tar zxvf cmake-3.8.2.tar.gz
[[email protected] artc]# cd cmake-3.8.2
[[email protected] cmake-3.8.2]# ./bootstrap
[[email protected] cmake-3.8.2]# gmake
[[email protected] cmake-3.8.2]# gmake install

##  The domestic warehouse is relatively fast
[[email protected] ~]# cd /usr/local/
[[email protected] local]# git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
[[email protected] local]# cd ZLMediaKit
# Don't forget to carry out this command
[[email protected] ZLMediaKit]# git submodule update --init

##  Compilation and installation
[[email protected] ZLMediaKit]# mkdir build
[[email protected] ZLMediaKit]# cmake .
[[email protected] ZLMediaKit]# make -j4

## ZLMediaKit Service catalog
[[email protected] ZLMediaKit]# cd release/linux/Debug

The configuration file

[[email protected] Debug]# vim config.ini

[general]
mediaServerId=12345678 ## Back and WVP-PRO docking

[hook]
admin_params=secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc ## Back and WVP-PRO docking

##  Program started
[[email protected] Debug]# ./MediaServer ##  The front desk starts
[[email protected] Debug]# ./MediaServer -d & ##  Background start

##  Soft connection
[[email protected] Debug]# ln -sf /home/ZLMediaKit/release/linux/Debug/MediaServer /usr/bin/
WVP-PRO Deploy
Project operation depends on redis、jdk1.8, Package dependency git、maven、nodejs、npm.
Redis Deploy
##  download epel Warehouse
[[email protected] ~]# yum install epel-release -y

##  download redis database
[[email protected] ~]# yum install redis -y

##  start-up redis And set to turn on auto start
[[email protected] ~]# systemctl start redis
[[email protected] ~]# systemctl enable redis

##  Set up redis  Remote connection and password  ( If they are all on the same machine   Don't take this step )
[[email protected] ~]# vim /etc/redis.conf
notes  #bind 127.0.0.1
modify  protected-mode no
modify  daemonize yes
modify  requirepass 123456

##  Turn off firewall or open 6379 port
[[email protected] ~]# systemctl stop firewalld // Turn off firewall
[[email protected] ~]# firewall-cmd --zone=public --add-port=6379/tcp --permanent // Open ports
[[email protected] ~]# firewall-cmd --reload // After opening the port   Need to update

##  restart redis
[[email protected] ~]# systemctl restart redis
MySQL Deploy
[[email protected] ~]# yum -y install mariadb mariadb-server
[[email protected] ~]# systemctl enable mariadb
[[email protected] ~]# systemctl start mariadb
[[email protected] ~]# mysql -uroot 
mysql> set password = password('123456');
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; // Set up mysql Internet connection password
mysql> flush privileges;
JDK Deploy
[[email protected] ~]# tar zxvf jdk-8u121-linux-x64.tar.gz
[[email protected] ~]# mv jdk1.8.0_121/ /usr/local/jdk
[[email protected] ~]# vim /etc/profile
## Add... At the end
export JAVA_HOME=/usr/local/jdk 
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/ 
export PATH=$PATH:$JAVA_HOME/bin

[[email protected] ~]# source /etc/profile
[[email protected] ~]# 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 Deploy
[[email protected] ~]# tar zxvf apache-maven-3.5.0-bin.tar.gz
[[email protected] ~]# mv apache-maven-3.5.0 /usr/local/maven
[[email protected] ~]# vim /etc/profile
## Add... At the end
export MAVEN_HOME=/usr/local/maven 
export PATH=$MAVEN_HOME/bin:$PATH

[[email protected] ~]# source /etc/profile
[[email protected] ~]# mvn -version
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)
Maven home: /usr/local/maven
compile WVP-PRO
##  Installation dependency
[[email protected] ~]# yum -y install git nodejs npm

##  Download the source code
[[email protected] ~]# cd /usr/local
[[email protected] local]# git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git

##  Compile static pages
[[email protected] ~]# cd /usr/local/wvp-GB28181-pro/web_src/
[[email protected] web_src]# npm --registry=https://registry.npm.taobao.org install
[[email protected] web_src]# npm run build

##  Packaging project ,  Generate executable jar
[[email protected] web_src]# cd ..
[[email protected] wvp-GB28181-pro]# mvn package

##  When the compilation is complete target Appear under directory wvp-pro-x.x-xxxxxxxx.jar

##  Import MySQL file
[[email protected] ~]# cd /usr/local/wvp-GB28181-pro/sql
[[email protected] sql]# mysql -uroot -p123456
MariaDB [(none)]> create database wvp;
MariaDB [(none)]> use wvp;
MariaDB [(none)]> source mysql.sql ##  Byte errors may occur   take mysql.sql Inside 255 Byte modification dot  

##  Configuration file modification
[[email protected] wvp-GB28181-pro]# mv src/main/resources/application-dev.yml target/application.yml 
[[email protected] wvp-GB28181-pro]# vim target/application.yml

spring:
 # [ Optional ] Upload file size limit
 servlet:
 multipart:
 max-file-size: 10MB
 max-request-size: 100MB
 # REDIS Database configuration
 redis:
 # [ Must be modified ] Redis The server IP, REDIS Installed on the of this machine , Use 127.0.0.1
 host: 127.0.0.1
 # [ Must be modified ]  Port number
 port: 6379
 # [ Optional ]  database  DB
 database: 6
 # [ Optional ]  Access password , If your redis The server doesn't have a password , You don't need a password to connect
 password: 
 # [ Optional ]  Timeout time
 timeout: 10000
 # mysql data source
 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 #  Number of connection pool initialization connections
 maxActive: 200 #  Maximum number of connections in connection pool
 minIdle: 5 #  The minimum number of free connections in the connection pool
 maxWait: 60000 #  Maximum wait time when getting a connection , Unit millisecond . Configured with maxWait after , Fair lock is enabled by default , Concurrency efficiency will decrease , If necessary, it can be configured through useUnfairLock The attribute is true Use unfair locks .
 keepAlive: true #  Connect... In the pool minIdle No more connections , Idle time exceeds minEvictableIdleTimeMillis, Will perform keepAlive operation .
 validationQuery: select 1 #  Check whether the connection is valid sql, The requirement is a query statement , Commonly used select 'x'. If validationQuery by null,testOnBorrow、testOnReturn、testWhileIdle It doesn't work .
 testWhileIdle: true #  Recommended configuration is true, No performance impact , And ensure safety . Check when applying for connection , If the free time is greater than timeBetweenEvictionRunsMillis, perform validationQuery Check whether the connection is valid .
 testOnBorrow: false #  Execute on connection request validationQuery Check whether the connection is valid , This configuration will degrade performance .
 testOnReturn: false #  Execute... When returning the connection validationQuery Check whether the connection is valid , This configuration will degrade performance .
 poolPreparedStatements: false #  Whether to open PSCache, And specify each connection PSCache Size
 timeBetweenEvictionRunsMillis: 60000 #  How often is the configuration interval checked , Detect idle connections that need to be closed , It's in milliseconds
 minEvictableIdleTimeMillis: 300000 #  Configure the minimum lifetime of a connection in the pool , It's in milliseconds
 filters: stat,wall,slf4j #  Configure monitoring statistics interception filters, For monitoring statistics filter:sta,  It's for the log filter:log4j,  defense sql Injected filter:wall
 useGlobalDataSourceStat: true #  Merge multiple DruidDataSource Monitoring data
 #  adopt connectProperties Property to open mergeSql function ; slow SQL Record
 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000
 #stat-view-servlet.url-pattern: /admin/druid/*

#[ Optional ] WVP Monitoring HTTP port ,  This port is used for web pages and interface calls
server:
 port: 18080

#  As 28181 Server configuration
sip:
 # [ Must be modified ]  Native IP
 ip: 192.168.1.13
 # [ Optional ] 28181 The port the service listens on
 port: 5060
 #  According to the national standard 6.1.2 Specified in the ,domain It is advisable to use ID The first ten digits of unified coding . National standard appendix D Before definition in 8 Bit centered coding ( By the provincial level 、 Municipal level 、 District level 、 The basic level is composed of numbers , reference GB/T 2260-2007)
 #  The last two digits are industry codes , Refer to appendix for definitions D.3
 # 3701020049 Logo: Lixia District, Jinan, Shandong   Information industry access
 # [ Optional ]
 domain: 4401020049
 # [ Optional ]
 id: 44010200492000000001
 # [ Optional ]  Default device authentication password , Subsequent extensions use the device's separate password ,  Removing the password will not be verified
 password: admin123

#zlm  Default server configuration
media:
 id: 12345678 ##ZLMediaKit Configured ID
 # [ Must be modified ] zlm The intranet of the server IP
 ip: 192.168.1.13
 # [ Must be modified ] zlm Server's http.port
 http-port: 80
 # [ Optional ] zlm Server's hook.admin_params=secret
 secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc
 #  Enable multi port mode ,  Multiport mode uses ports to distinguish each flow , Better compatibility .  Single port uses streaming ssrc distinguish ,  On demand timeout, it is recommended to use multi port test
 rtp:
 # [ Optional ]  Whether to enable multi port mode ,  After opening, it will be in portRange Select the port within the range for media streaming
 enable: true
 # [ Optional ]  Select ports within this range for media streaming ,  Must be in advance at zlm Configure this property on , Otherwise, automatic configuration of this property may not succeed
 port-range: 30000,30500 #  Port range
 # [ Optional ]  GB cascade selects ports within this range to send media streams ,
 send-port-range: 30000,30500 #  Port range
 #  Video assisted Services ,  Deploying this service can achieve zlm Video management and download , 0  No use
 record-assist-port: 18081
# [ Optional ]  Log configuration ,  Generally, there is no need to change
logging:
 config: classpath:logback-spring-local.xml

#  Version information ,  Don't need to modify
version:
 version: "@[email protected]"
 description: "@[email protected]"
 artifact-id: "@[email protected]"

##  start-up WVP
[[email protected] wvp-GB28181-pro]# cd target
[[email protected] target]# java -jar wvp-pro-2.3.1-06151618.jar

##  Access management page
http://192.168.1.13:18080
Default user name :admin,  password :admin
Click on the console --》 Media server configuration --》 Relevant information is enough

Self starting script

[[email protected] 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
else
 echo -e "\aJnice: unable to locate functions lib. Cannot continue."
 exit 0
fi

ulimit -n 65000
echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range

## jar File name
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

##  Filter pid Process number
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

[[email protected] target]# crontab -l
*/1 * * * * sh /usr/local/wvp-GB28181-pro/target/wvp-pro.sh start >/dev/null 2>&1

null
原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/174/202206231217468236.html