Linux平台下搭建GB28181服务器(WVP+ZLMediakit)

文章目录

    • 什么是GB28181
    • 平台依赖项
    • 搭建步骤
      • 配置Redis和MySQL
      • 配置ZLMediakit
      • 配置WVP
    • 使用效果
    • 封装成Docker镜像

什么是GB28181

GB28181(国标28181),全称为《中华人民共和国公共安全视频监控联网系统技术要求》,是中国国家标准委员会发布的一个针对公共安全视频监控领域的标准框架。该标准指导了视频监控设备之间的联网互通,统一管理和控制,并提供了一套包括设备接入、设备管理、视频传输、事件告警等功能要求。

GB28181标准采用了基于IP网络的架构,通过使用 SIP(Session Initiation Protocol,会话初始协议) 实现设备的接入通信和管理,通过使用RTSP(Real-Time Streaming Protocol 实时流传输协议) 标准协议实现设备之间的视频流传输,包括实时预览、录像回放等操作。

总体而言,GB28181 标准的出台旨在提高公共安全视频监控系统的互联互通能力,促进不同厂家设备的兼容性和互操作性,确保系统的可靠性、稳定性和安全性。它对于中国的公共安全行业具有重要意义,并在国内得到广泛的推广和应用。

平台依赖项

在Linux平台下搭建GB28181服务器,主要使用的库包括WVP和ZLMediakit,两个项目的开源地址分别如下所示:
WVP
https://github.com/648540858/wvp-GB28181-pro
ZLMediakit
https://github.com/ZLMediaKit/ZLMediaKit

WVP是基于GB/T 28181-2016标准实现的流媒体平台,负责处理SIP信令,实现国产化设备的接入和管理。 而ZLMediakit作为流媒体服务器负责视频流的处理和转换。

搭建步骤

首先编译WVP和ZLMediakit,编译过程可以参考官方的教程,写的十分详细,这里就不多做介绍了。
WVP和ZLMediakit之间的关系图如下图所示:

在这里插入图片描述

配置Redis和MySQL

由于WVP依赖于Redis和MySQL这里先安装MySQL和Redis,安装流程如下所示:
安装MySQL

# Ubuntu 安装 MySQL 
sudo apt install mysql-server  # 检查MySQL是否在运行
sudo systemctl status mysql 

安装Redis

# 安装Redis
sudo apt update
sudo apt install redis-server redis-cli# 查看Redis的运行状态
sudo systemctl status redis-server

为了保障数据的安全性这里我们修改一下MySQL和Redis的缺省密码
修改MySQL的root密码

# 默认没密码 不用输入 直接按回车就可以了
mysql -u root -p# 在MySQL终端下 更新root密码
mysql> use mysql;
mysql> UPDATE uer SET authentication_string = PASSWORD('password') WHERE User = 'root';
# 刷新权限表
mysql> flush privileges;
# 退出
mysql> quit

修改Redis的密码

# 打开Redis的配置文件,通常位于/etc/redis/redis.conf
# 在配置文件中,找到并修改以下行(如果没有,则添加)
requirepass your_password
# 重启Redis
sudo systemctl restart redis# 如果Redis没有被设置成服务也可以通过下面的命令启动服务端  
nohup redis-server /etc/redis/redis.conf &

MySQL的默认编码是latin1,在执行WVP的Init.SQL脚本的时候,会报乱码错误,导致服务不可用,我们需要将MySQL的默认编码修改成UTF-8。 修改方式如下:
找到 my.cnf 配置文件, 该文件一般在/etc/mysql目录下, 在文件中添加如下配置:

[mysqld]
character_set_server = utf8
collation_server     = utf8_general_ci

也可以在SQL命令中指定字符编码方式:

reate table wvp_log (id serial primary key ,name character varying(50) CHARACTER SET utf8 COLLATE utf8_general_ci,type character varying(50)
)CHARACTER SET utf8 COLLATE utf8_general_ci;

当然修改编码的方式还有很多,这里只介绍这两种。修改完配置之后,重启mysql服务,重启方式如下:

service mysql restart

配置ZLMediakit

配置完成Redis和MySQL之后, 我们先启动ZLMediakit, 启动命令如下:

# 后台运行输出
nohup MediaServer -c ./config.ini  > /dev/null 2>&1 &

ZLMediakit的配置文件config.ini 如下所示(省略不重要的配置):

[api]# secret 值用来鉴权处理
...
secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc
...[general]
...
# ZLMediakit的ID 
mediaServerId=my_zlmediakit_id
...[hook]
# 用作鉴权处理
admin_params=secret=035c73f7-bb6b-4889-a715-d9eb2d1925cc[http]
# http的端口号,通过这个端口进行配置处理
port=18800[protocol]
# 是否开启hls
enable_hls=0
# 是否开启rtmp
enable_rtmp=1
# 是否开启rtsp
enable_rtsp=1
# 是否开启ts
enable_ts=0[rtmp]
# rtmp的端口号
port=1935[rtsp]
# rtsp的端口号
port=554

配置WVP

ZLMediakit 配置完成之后,我们就可以启动WVP了.

WVP的配置文件application.yml如下所示(省略了不重要的配置)

spring:# REDIS数据库配置redis:# [必须修改] Redis服务器IP, REDIS安装在本机使用127.0.0.1host: 127.0.0.1# [必须修改] Redis端口号port: 6379# [可选] 数据库 DBdatabase: 7# [可选] Redis访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接password: redis_passwd# mysql数据源datasource: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=true&allowPublicKeyRetrieval=true# MySQL的账号密码username: rootpassword: root_passwd#[可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
server:port: 8050# 作为28181服务器的配置
sip:# [必须修改] 本机的IP,对应你的网卡,监听什么ip就是使用什么网卡,# 如果要监听多张网卡,可以使用逗号分隔多个IP, 例如: 192.168.1.4,10.0.0.4# 如果不明白,就使用0.0.0.0,大部分情况都是可以的# 请不要使用127.0.0.1,任何包括localhost在内的域名都是不可以的。ip: 0.0.0.0# 28181服务监听的端口port: 18116# 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)# 后两位为行业编码,定义参照附录D.3domain: 4101050000id: 41010500002000000001# SIP验证密码password: sip_passwd#zlm 默认服务器配置
media:# 和zlm config.ini中的mediaServerId 保持一致id: my_zlmediakit_id# [必须修改] zlm服务器的内网IPip: 127.0.0.1# 和zlm config.ini中的http.port保持一致http-port: 80# 返回流地址时的ip,这里需要设置为本机的实际IP地址, 置空使用 media.ipstream-ip: 192.168.0.0# wvp在国标信令中使用的ip,这里需要设置为本机的实际IP地址, 置空使用 media.ipsdp-ip: 192.168.0.0# 和zlm config.ini中的rtmp.port/rtsp.port保持一致rtmp-port: 1935rtsp-port: 5545# 和zlm服务器的hook.admin_params=secret保持一致secret: 035c73f7-bb6b-4889-a715-d9eb2d1925ccrtp:# [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输enable: true# [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功port-range: 30000,30500 # 端口范围# [可选] 国标级联在此范围内选择端口发送媒体流,send-port-range: 30000,30500 # 端口范围# 辅助录像服务这里0为关闭record-assist-port: 0user-settings:#关闭推流鉴权push-authority: false	record-push-live: falseauto-apply-play: false 

由于WVP启动的时候需要用到一些数据库表,包括设备表、用户名表等, 以这里先调用WVP提供的SQL脚本初始化对应的数据库信息。
WVP提供的初始化SQL脚本的地址为wvp/sql/init.sql。

# 创建数据库wvp
mysql -u root -proot_passwd -e "CREATE DATABASE wvp"
# 在wvp中执行init.sql脚本 初始化对应的数据库表
mysql -u root -proot_passwd wvp < ./sql/init.sql

初始化完成之后,我们就可以启动wvp的服务了启动命令如下所示:

java -jar ./wvp/wvp-pro.jar --spring.config.location=./conf/application.yml

使用效果

WVP+ZLM启动成功之后,在浏览器中输入IP:server.port/#/login就可以进入WVP的登录界面了登录界面如下所示:

在这里插入图片描述

WVP默认的账户和密码都是admin
登录之后的界面如下所示:
在这里插入图片描述

在摄像头中配置WVP-GB28181平台的信息,注册对应的设备信息,这里以官方提供的海康摄像头为例进行说明:

在这里插入图片描述

摄像头中的配置和application.yml中的配置项的对应关系如下所示:
配置项1 对应着sip.password
配置项2 对应着sip.port
配置项3 对应着sip.domain
配置项4 对应着sip.ip
配置项5 对应着sip.id

配置完成之后,过一段时间我们就可以在WVP的国标设备中查看到对应的设备信息了。

封装成Docker镜像

把GB28181服务器封装成docker镜像,主要工作就是把WVP+ZLM以及其依赖的环境封放到Docker镜像中,这里一些流程化的细节不做展开讨论。着重说明一下端口开放问题,官方提供的端口开放列表如下:

服务端口类型必选
wvpserver.porttcp
wvpsip.porttcp/udp
zlmhttp.porttcp
zlmhttp.sslporttcp
zlmrtmp.porttcp
zlmrtmp.sslporttcp
zlmrtsp.portudp/tcp
zlmrtsp.sslportudp/tcp
zlmrtp_proxy.portudp/tcp单端口开放
zlmrtp.port-rangeudp/tcp多端口开放

GB28281服务器很多端口是既要开放UDP也要开发TCP的,所以docker镜像如果只映射TCP端口的话, 会出现服务访问失败的问题。
下面以创建GB28181镜像的命令为例说明一下docker镜像如何做端口映射:

docker create -it --privileged=true --restart=always \
-p zlm.rtmp.port:zlm.rtmp.port -p zlm.rtsp.port:zlm.rtsp.port  -p wvp.web.port:wvp.web.port -p wvp.sip.port:wvp.sip.port/tcp  -p wvp.sip.port:wvp.sip.port/udp \
-p 30000-30500:30000-30500/tcp -p 30000-30500:30000-30500/udp \
-p zlm.rtp.port:zlm.rtp.port/tcp -p zlm.rtp.port:zlm.rtp.port/udp \
--name=wvp_zlm my_gb28181_image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/63274.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot+mybatis+mybatis-plus对crud项目进行改进

springbootmybatis实现简单的增、删、查、改https://blog.csdn.net/heyl163_/article/details/132197201上一篇文章&#xff0c;已经详细地介绍了怎么通过springboot项目整合mybatis实现简单的数据库表的增删改查功能&#xff0c;是最简单的springboot项目的结构。所以有很多问…

易服客工作室:如何在WordPress网站中举办虚拟活动

您是否正在寻找举办和管理虚拟活动的最佳方式&#xff1f; 也许您想在线举行下一次会议或举办有关您的产品和服务的网络研讨会。您可能担心它太贵&#xff0c;或者您没有技术知识来实现​​它。 在本文中&#xff0c;我们将列出您所需的在线服务的所有设备&#xff0c;并教您…

【vue3】基础知识点-setup语法糖

学习vue3&#xff0c;都会从基础知识点学起。了解setup函数&#xff0c;ref&#xff0c;recative&#xff0c;watch、comptued、pinia等如何使用 今天说vue3组合式api&#xff0c;setup函数 在学习过程中一开始接触到的是这样的&#xff0c;定义数据且都要通过return返回 <…

Map中compute、putIfAbsent、computeIfAbsent、merge、computeIfPresent使用

目录 putIfAbsent computeIfAbsent computeIfPresent compute merge putIfAbsent 解释&#xff1a;【不存在则添加】&#xff0c;如果map中没有该key&#xff0c;则直接添加&#xff1b;如果map中已经存在该key&#xff0c;则value保持不变 default V putIfAbsent(K key,…

Linux文件属性与权限管理(可读、可写、可执行)

Linux把所有文件和设备都当作文件来管理&#xff0c;这些文件都在根目录下&#xff0c;同时Linux中的文件名区分大小写。 一、文件属性 使用ls -l命令查看文件详情&#xff1a; 1、每行代表一个文件&#xff0c;每行的第一个字符代表文件类型&#xff0c;linux文件类型包括&am…

百川智能发布首个530亿参数闭源大模型,今年追上GPT-3.5

4月官宣创业&#xff0c;6月15日发布第一款7B开源模型&#xff0c;7月11日发布第二款13B、130亿参数开源模型。 平均保持2个月一个版本发布速度&#xff0c;8月8日&#xff0c;百川智能发布了创业以来的首个530亿参数闭源大模型——Baichuan-53B&#xff08;以下简称“53B”&a…

企业产品手册5大核心功能,附产品手册在线制作工具Baklib

企业产品手册的5大核心功能 企业产品手册是企业向用户传达产品信息、功能和使用方法的重要工具。下面将介绍企业产品手册的五个核心功能。 1. 产品介绍和特点展示 产品手册的首要功能是介绍和展示企业的产品。它应该提供清晰、详细的产品信息&#xff0c;包括产品的特点、优势…

5G用户逼近7亿,5G发展迈入下半场!

尽管普遍认为5G投资高峰期正在过去&#xff0c;但是从2023年上半年的情况来看&#xff0c;我国5G建设仍在衔枚疾走。 近日举行2023年上半年工业和信息化发展情况新闻发布会上&#xff0c;工信部人士透露&#xff0c;截至今年6月底&#xff0c;我国5G基站累计达到293.7万个&…

InVEST模型使用

第一天&#xff1a; 1. 生态系统服务理论联系实践案例讲解 2. InVEST模型的开发历程、不同版本的差异及对数据需求的讲解 3. InVEST所需数据的要求&#xff08;分辨率、格式、投影系统等&#xff09;、获取及标准化预处理讲解 4. InVEST运行常见问题及处理解决方法讲解 5.…

新疆大学841软件工程考研

1&#xff0e;软件生产的发展经历了三个阶段&#xff0c;分别是____、程序系统时代和软件工程时代时代。 2&#xff0e;可行性研究从以下三个方面研究每种解决方法的可行性&#xff1a;经济可行性、社会可行性和_____。 3&#xff0e;HIPO图的H图用于描述软件的层次关系&…

uniapp 小兔鲜儿 - 首页模块(1)

目录 自定义导航栏 静态结构 安全区域​ 通用轮播组件 静态结构 自动导入全局组件 全局组件类型声明 .d.ts文件 注册组件 vue/runtime-core 首页 – 轮播图指示点 首页 – 获取轮播图数据 首页 – 轮播图数据类型并渲染 首页 – 轮播图总结 首页分类 首页 – 前…

五金仓库的管理数字化

随着信息技术的快速发展&#xff0c;数字化管理在各行各业中迅速普及。数字化管理可以让企业轻松高效地收集、存储和共享数据&#xff0c;并利用大数据分析和人工智能等工具进行精确分析和预测&#xff0c;从而更好地理解业务运作情况并做出相应调整&#xff0c;以提高企业效率…