当前位置:首页 > Linux > 正文内容

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

deboss1年前 (2024-02-04)Linux77

介绍

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

应用场景

· 支持浏览器无插件播放摄像头视频。

· 支持摄像机、平台、NVR等设备接入。 支持国标级联。

· 支持rtsp/rtmp等视频流转发到国标平台。

· 支持rtsp/rtmp等推流转发到国标平台。

服务部署

ZLMediaKit部署

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

1. ## 准备环境

2. [root@localhost artc]# yum install -y epel-release

3. 

4. ## gcc和yasm需要高版本  小编用的是gcc4.8.5 yasm1.2.0

5. [root@localhost artc]# yum -y install  yasm  gcc* 

6. [root@localhost artc]# yum -y install  openssl-devel  SDL-devel

7. 

8. ## 编译安装cmake 3.8.2

9. [root@localhost ~]# cd /home/artc

10. [root@localhost artc]# wget https://cmake.org/files/v3.8/cmake-3.8.2.tar.gz

11. [root@localhost artc]# tar zxvf cmake-3.8.2.tar.gz

12. [root@localhost artc]# cd cmake-3.8.2

13. [root@localhost cmake-3.8.2]# ./bootstrap

14. [root@localhost cmake-3.8.2]# gmake

15. [root@localhost cmake-3.8.2]# gmake install

16. 

17. ## 国内库比较快

18. [root@localhost ~]# cd  /usr/local/

19. [root@localhost local]# git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit

20. [root@localhost local]# cd ZLMediaKit

21. #千万不要忘记执行这句命令

22. [root@localhost ZLMediaKit]# git submodule update --init

23. 

24. ## 编译安装

25. [root@localhost ZLMediaKit]# mkdir build

26. [root@localhost ZLMediaKit]# cmake .

27. [root@localhost ZLMediaKit]# make -j4

28. 

29. ## ZLMediaKit服务目录

30. [root@localhost ZLMediaKit]# cd release/linux/Debug

配置文件

[root@localhost Debug]# vim config.ini

1. [general]

2. mediaServerId=12345678  ##后面和WVP-PRO对接

3. 

4. [hook]

5. admin_params=secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc   ##后面和WVP-PRO对接

1. ## 程序启动

2. [root@localhost Debug]# ./MediaServer       ## 前台启动

3. [root@localhost Debug]# ./MediaServer -d & ## 后台启动

4. 

5. ## 软连接

6. [root@localhost Debug]# ln -sf /home/ZLMediaKit/release/linux/Debug/MediaServer /usr/bin/

WVP-PRO部署

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

Redis部署

1. ## 下载epel仓库

2. [root@localhost ~]# yum install epel-release -y

3. 

4. ## 下载redis数据库

5. [root@localhost ~]# yum install redis -y

6. 

7. ## 启动redis和设置开启自启动

8. [root@localhost ~]# systemctl start redis

9. [root@localhost ~]# systemctl enable redis

1. ## 设置redis 远程连接和密码   (如果都在同一台机器上 不用这一步)

2. [root@localhost ~]# vim /etc/redis.conf

3. 注释 #bind 127.0.0.1

4. 修改 protected-mode no

5. 修改 daemonize yes

6. 修改 requirepass 123456

7. 

8. ## 关闭防火墙或者开放6379端口

9. [root@localhost ~]# systemctl stop firewalld  //关闭防火墙

10. [root@localhost ~]# firewall-cmd --zone=public --add-port=6379/tcp --permanent  //开放端口

11. [root@localhost ~]# firewall-cmd --reload      //开放端口后 需要更新一下

12. 

13. ## 重启redis

14. [root@localhost ~]# systemctl restart redis

MySQL部署

1. [root@localhost ~]# yum -y install mariadb mariadb-server

2. [root@localhost ~]# systemctl enable mariadb

3. [root@localhost ~]# systemctl start mariadb

4. [root@localhost ~]# mysql -uroot

5. mysql> set password = password('123456');

6. mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;    //设置mysql外网连接密码

7. mysql> flush privileges;

JDK部署

1. [root@localhost ~]# tar zxvf jdk-8u121-linux-x64.tar.gz

2. [root@localhost ~]# mv jdk1.8.0_121/ /usr/local/jdk

3. [root@localhost ~]# vim /etc/profile

4. ##末尾添加

5. export JAVA_HOME=/usr/local/jdk

6. export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/ 

7. export PATH=$PATH:$JAVA_HOME/bin

1. [root@localhost ~]# source /etc/profile

2. [root@localhost ~]# java -version

3. java version "1.8.0_121"

4. Java(TM) SE Runtime Environment (build 1.8.0_121-b13)

5. Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

Maven部署

1. [root@localhost ~]# tar zxvf apache-maven-3.5.0-bin.tar.gz

2. [root@localhost ~]# mv apache-maven-3.5.0 /usr/local/maven

3. [root@localhost ~]# vim /etc/profile

4. ##末尾添加

5. export MAVEN_HOME=/usr/local/maven

6. export PATH=$MAVEN_HOME/bin:$PATH

1. [root@localhost ~]# source /etc/profile

2. [root@localhost ~]# mvn -version

3. Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T03:39:06+08:00)

4. Maven home: /usr/local/maven

编译WVP-PRO

1. ## 安装依赖

2. [root@localhost ~]# yum -y install git nodejs npm

3. 

4. ## 下载源码

5. [root@localhost ~]# cd /usr/local

6. [root@localhost local]# git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git

7. 

8. ## 编译静态页面

9. [root@localhost ~]# cd /usr/local/wvp-GB28181-pro/web_src/

10. [root@localhost web_src]# npm --registry=https://registry.npm.taobao.org install

11. [root@localhost web_src]# npm run build

12. 

13. ## 打包项目, 生成可执行jar

14. [root@localhost web_src]# cd ..

15. [root@localhost wvp-GB28181-pro]# mvn package

16. 

17. ## 编译完成后在target目录下出现wvp-pro-x.x-xxxxxxxx.jar

1. ## 导入MySQL文件

2. [root@localhost ~]# cd /usr/local/wvp-GB28181-pro/sql

3. [root@localhost sql]# mysql -uroot -p123456

4. MariaDB [(none)]> create database wvp;

5. MariaDB [(none)]> use wvp;

6. MariaDB [(none)]> source mysql.sql   ## 可能会出现字节错误  将mysql.sql里面的255字节修改小点

1. ## 配置文件修改

2. [root@localhost wvp-GB28181-pro]# mv src/main/resources/application-dev.yml  target/application.yml

3. [root@localhost wvp-GB28181-pro]# vim target/application.yml

1. spring:

2.     # [可选]上传文件大小限制

3.     servlet:

4.         multipart:

5.             max-file-size: 10MB

6.             max-request-size: 100MB

7.     # REDIS数据库配置

8.     redis:

9.         # [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1

10.         host: 127.0.0.1

11.         # [必须修改] 端口号

12.         port: 6379

13.         # [可选] 数据库 DB

14.         database: 6

15.         # [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接

16.         password: 

17.         # [可选] 超时时间

18.         timeout: 10000

19.         # mysql数据源

20.     datasource:

21.         type: com.alibaba.druid.pool.DruidDataSource

22.         driver-class-name: com.mysql.cj.jdbc.Driver

23.         url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true

24.         username: root

25.         password: 123456

26.         druid:

27.             initialSize: 10                       # 连接池初始化连接数

28.             maxActive: 200                        # 连接池最大连接数

29.             minIdle: 5                            # 连接池最小空闲连接数

30.             maxWait: 60000                        # 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。

31.             keepAlive: true                       # 连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。

32.             validationQuery: select 1             # 检测连接是否有效sql,要求是查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。

33.             testWhileIdle: true                   # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。

34.             testOnBorrow: false                   # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。

35.             testOnReturn: false                   # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。

36.             poolPreparedStatements: false         # 是否開啟PSCache,並且指定每個連線上PSCache的大小

37.             timeBetweenEvictionRunsMillis: 60000  # 配置間隔多久才進行一次檢測,檢測需要關閉的空閒連線,單位是毫秒

38.             minEvictableIdleTimeMillis: 300000    # 配置一個連線在池中最小生存的時間,單位是毫秒

39.             filters: stat,wall,slf4j             # 配置监控统计拦截的filters,监控统计用的filter:sta, 日志用的filter:log4j, 防御sql注入的filter:wall

40.             useGlobalDataSourceStat: true         # 合并多个DruidDataSource的监控数据

41.             # 通过connectProperties属性来打开mergeSql功能;慢SQL记录

42.             connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=1000

43.             #stat-view-servlet.url-pattern: /admin/druid/*

44. 

45. #[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口

46. server:

47.     port: 18080

48. 

49. # 作为28181服务器的配置

50. sip:

51.     # [必须修改] 本机的IP

52.     ip: 192.168.1.13

53.     # [可选] 28181服务监听的端口

54.     port: 5060

55.     # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)

56.     # 后两位为行业编码,定义参照附录D.3

57.     # 3701020049标识山东济南历下区 信息行业接入

58.     # [可选]

59.     domain: 4401020049

60.     # [可选]

61.     id: 44010200492000000001

62.     # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验

63.     password: admin123

64. 

65. #zlm 默认服务器配置

66. media:

67.     id: 12345678    ##ZLMediaKit配置的ID

68.     # [必须修改] zlm服务器的内网IP

69.     ip: 192.168.1.13

70.     # [必须修改] zlm服务器的http.port

71.     http-port: 80

72.     # [可选] zlm服务器的hook.admin_params=secret

73.     secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc

74.     # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试

75.     rtp:

76.         # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输

77.         enable: true

78.         # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功

79.         port-range: 30000,30500 # 端口范围

80.         # [可选] 国标级联在此范围内选择端口发送媒体流,

81.         send-port-range: 30000,30500 # 端口范围

82.     # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用

83.     record-assist-port: 18081

84. # [可选] 日志配置, 一般不需要改

85. logging:

86.     config: classpath:logback-spring-local.xml

87. 

88. # 版本信息, 不需修改

89. version:

90.     version: "@project.version@"

91.     description: "@project.description@"

92.     artifact-id: "@project.artifactId@"

1. ## 启动WVP

2. [root@localhost wvp-GB28181-pro]#  cd target

3. [root@localhost target]#  java -jar wvp-pro-2.3.1-06151618.jar

4. 

5. ## 访问管理页面

6. http://192.168.1.13:18080

7. 默认用户名:admin 密码:admin

8. 点击控制台--》媒体服务器配置--》有相关信息即可

自启动脚本

1. [root@localhost target]# cat wvp-pro.sh

2. #!/bin/sh

3. ##

4. if [ -f /etc/init.d/functions ]; then

5.     . /etc/init.d/functions

6. elif [ -f /etc/rc.d/init.d/functions ]; then

7.     . /etc/rc.d/init.d/functions

8. else

9.     echo -e "\aJnice: unable to locate functions lib. Cannot continue."

10.     exit 0

11. fi

12. 

13. ulimit -n 65000

14. echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range

15. 

16. ## jar文件名称

17. export JAVA_HOME=/usr/lib/jvm/java-1.8.0

18. export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/ 

19. export PATH=$PATH:$JAVA_HOME/bin

20. JAR_HOME=/usr/local/wvp-GB28181-pro/target

21. JAR_NAME=wvp-pro-2.3.1-06151618.jar

22. 

23. ## 过滤pid进程号

24. wvp_pro=`ps -ef|grep $JAR_NAME | grep -v grep | grep -v kill | awk '{print $2}'`

25. 

26. #---------------------------------------------------------------------------

27. # START

28. #---------------------------------------------------------------------------

29. Start()

30. {

31.     if [ $tpid ]; then

32.         echo -n "wvp_pro process [${prog}] already running"

33.         echo_failure

34.         echo

35.         return 1

36.     fi

37. 

38.     if [ ! -f ${JAR_HOME}/${JAR_NAME} ]; then

39.         echo -n "wvp_pro binary [${prog}] not found."

40.         echo_failure

41.         echo

42.         return 1

43.     fi

44. 

45.     echo -n "starting service (wvp_pro): "

46.     cd ${JAR_HOME}

47.     nohup java -jar ${JAR_HOME}/${JAR_NAME}  > /dev/null 2>&1 &

48.     retval=$?

49.     if [ ${retval} == 0 ]; then

50.         echo_success

51.         echo

52.     else

53.         echo_failure

54.         echo

55.         break

56.     fi

57.     sleep 1

58. 

59.     return 0

60. }

61. 

62. #---------------------------------------------------------------------------

63. # STOP

64. #---------------------------------------------------------------------------

65. Stop()

66. {

67.     echo -n "stopping service (wvp_pro): "

68.     kill -9 $wvp_pro

69.     echo

70.     return 0

71. }

72. 

73. #---------------------------------------------------------------------------

74. # MAIN

75. #---------------------------------------------------------------------------

76. case "$1" in

77.     start)

78.         Start

79.         ;;

80.     stop)

81.         Stop

82.         ;;

83.     restart)

84.         Stop

85.         sleep 3

86.         Start

87.         ;;

88.     *)

89.         echo "please use : $0 {start|stop|restart}"

90. esac

91. 

92. exit

1. [root@localhost target]# crontab -l

2. */1 * * * * sh /usr/local/wvp-GB28181-pro/target/wvp-pro.sh  start  >/dev/null 2>&1

 


扫描二维码推送至手机访问。

版权声明:本文由四川方脑壳发布,如需转载请注明出处。

本文链接:https://sc.six666.cn/?id=18

分享给朋友:

“技术分享| WVP+ZLMediaKit实现摄像头GB28181推流播放” 的相关文章

常用VPS测试脚本代码:综合性能/硬件/IO Speed/CPU跑分/回程路由/硬盘读写/测速ping延迟测试VPS服务器一键脚本

常用VPS测试脚本代码:综合性能/硬件/IO Speed/CPU跑分/回程路由/硬盘读写/测速ping延迟测试VPS服务器一键脚本

VPS服务器一键测试脚本,VPS常用测速脚本代码:检测VPS综合性能,VPS硬件信息、CPU跑分,内存,硬盘大小,硬盘IO speed读写测试、speedtest,国内国外节点下载测速,ping网络延迟,Trace去程回程路由,一键开启BBR等等的测试脚本。测试完之后大家就会对自己的VPS小鸡有个底...

全自动一键网络重装脚本(DD脚本)

全自动一键网络重装脚本(DD脚本)

全自动一键网络重装脚本(DD脚本)2022-06-19 分类:技术笔记 阅读(1W+)之前写了一篇《萌咖一键DD纯净系统脚本(2021年8月最新版) CentOS/Debian/Ubuntu》,部分网友反馈,同样的情况下,有的人D成功了,有人却失败失联。诚然,萌咖的脚本在一些机型...