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.1
    host: 127.0.0.1
    # [必须修改] Redis端口号
    port: 6379
    # [可选] 数据库 DB
    database: 7
    # [可选] Redis访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
    password: redis_passwd
    # mysql数据源
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    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&allowPublicKeyRetrieval=true
    # MySQL的账号密码
    username: root
    password: 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.3
  domain: 4101050000
  id: 41010500002000000001
  # SIP验证密码
  password: sip_passwd
 
#zlm 默认服务器配置
media:
  # 和zlm config.ini中的mediaServerId 保持一致
  id: my_zlmediakit_id
  # [必须修改] zlm服务器的内网IP
  ip: 127.0.0.1
  # 和zlm config.ini中的http.port保持一致
  http-port: 80
  # 返回流地址时的ip,这里需要设置为本机的实际IP地址, 置空使用 media.ip
  stream-ip: 192.168.0.0
  # wvp在国标信令中使用的ip,这里需要设置为本机的实际IP地址, 置空使用 media.ip
  sdp-ip: 192.168.0.0
  # 和zlm config.ini中的rtmp.port/rtsp.port保持一致
  rtmp-port: 1935
  rtsp-port: 5545
  
  # 和zlm服务器的hook.admin_params=secret保持一致
  secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc
  rtp:
    # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
    enable: true
    # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功
    port-range: 30000,30500 # 端口范围
    # [可选] 国标级联在此范围内选择端口发送媒体流,
    send-port-range: 30000,30500 # 端口范围
  # 辅助录像服务这里0为关闭
  record-assist-port: 0

user-settings:
  #关闭推流鉴权
  push-authority: false	
  record-push-live: false
  auto-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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Tomcat+Http+Servlet

文章目录 1.HTTP1.1 请求和响应HTTP请求&#xff1a;请求行请求头请求体HTTP响应&#xff1a;响应行&#xff08;状态行&#xff09;响应头响应体 2. Apache Tomcat2.1 基本使用2.2 IDEA中创建 Maven Web项目2.3 IDEA中使用Tomcat 3. Servlet3.1 Servlet快速入门3.2 Servlet执行…

IDEA的常用设置,让你更快速的编程

一、前言 在使用JetBrains的IntelliJ IDEA进行软件开发时&#xff0c;了解和正确配置一些常用设置是非常重要的。IDEA的强大功能和定制性使得开发过程更加高效和舒适。 在本文中&#xff0c;我们将介绍一些常用的IDEA设置&#xff0c;帮助您更好地利用IDEA进行开发。这些设置包…

VS2019 + Qt : setToolTip的提示内容出现乱码

VS2019 Qt : setToolTip的提示内容出现乱码 在使用setToolTip()时&#xff0c; setToolTip(QString("asd你好&#xff01;");标签提示只有英文是对的&#xff0c;中文是乱码&#xff01; 应该是编码出了问题。默认情况下&#xff0c;Qt使用的是UTF-8编码&#xf…

Docker+Selenium Grid搭建自动化测试平台

安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce -y Create a Docker Network docker network create grid 下载镜像 hu…

YOLO v5、v7、v8 模型优化

YOLO v5、v7、v8 模型优化 魔改YOLOyaml 文件解读模型选择在线做数据标注 YOLO算法改进YOLOv5更换骨干网络之 SwinTransformer更换骨干网络之 EfficientNet优化上采样方式&#xff1a;轻量化算子CARAFE 替换 传统&#xff08;最近邻 / 双线性 / 双立方 / 三线性 / 转置卷积&…

数据结构单链表

单链表 1 链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链 接次序实现的 。 在我们开始讲链表之前&#xff0c;我们是写了顺序表&#xff0c;顺序表就是类似一个数组的东西&#xff0…

使用Python批量将Word文件转为PDF文件

说明&#xff1a;在使用Minio服务器时&#xff0c;无法对word文件预览&#xff0c;如果有需要的话&#xff0c;可以将word文件转为pdf文件&#xff0c;再存储到Minio中&#xff0c;本文介绍如果批量将word文件&#xff0c;转为pdf格式的文件&#xff1b; 安装库 首先&#xff…

地址解析协议-ARP

ARP协议 无论网络层使用何种协议&#xff0c;在实际网络的链路上传输数据帧时&#xff0c;最终必须使用硬件地址 地址解析协议&#xff08;Address Resolution Protocol&#xff0c;ARP&#xff09;&#xff1a;完成IP地址到MAC地址的映射&#xff0c;每个主机都有一个ARP高速缓…

图片转换成pdf格式?这几种转换格式方法了解一下

图片转换成pdf格式&#xff1f;将图片转换成PDF格式的好处有很多。首先&#xff0c;PDF格式具有通用性&#xff0c;可以在几乎任何设备上查看。其次&#xff0c;PDF格式可以更好地保护文件&#xff0c;防止被篡改或者复制。此外&#xff0c;PDF格式还可以更好地压缩文件大小&am…

Python Web框架:Django、Flask和FastAPI巅峰对决

今天&#xff0c;我们将深入探讨Python Web框架的三巨头&#xff1a;Django、Flask和FastAPI。无论你是Python小白还是老司机&#xff0c;本文都会为你解惑&#xff0c;带你领略这三者的魅力。废话不多说&#xff0c;让我们开始这场终极对比&#xff01; Django&#xff1a;百…

泰迪大数据挖掘建模平台功能特色介绍

大数据挖掘建模平台面相高校、企业级别用户快速进行数据处理的建模工具。 大数据挖掘建模平台介绍 平台底层算法基于R语言、Python、Spark等引擎&#xff0c;使用JAVA语言开发&#xff0c;采用 B/S 结构&#xff0c;用户无需下载客户端&#xff0c;可直接通过浏览器进行…

docker 容器满了常用处理方法

docker 容器满了常用处理方法 1、运行 df -h 查看剩余磁盘占用情况 2、进入到docker目录 cd /var/lib/docker 3、运行du -h --max-depth1 &#xff08;检索文件的最大深度1&#xff0c;即只检索汇总计算当前目录下的文件&#xff09; 4、进入占用最大的 /containers文件夹&am…

spring入门基本介绍及注入方式---详细介绍

一&#xff0c;spring的简介 Spring是一个开源框架&#xff0c;它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。 提供了许多功能强大且易于使用的特性&#xff0c;使得开发者能够更加轻松地构建可维护且可扩展的应用程序&#xff0c;简单来说: Spring使用基…

Ant Design Vue 下拉框输入框 可以输入 可以查询

Ant Design Vue 下拉框 可以输入 可以查询 直接上代码 效果图 &#xff08;输入内容查询后端 返回下拉的值 &#xff0c;如何查询后端是空的直接 把输入的内容 赋值给 输入框&#xff09; 在这里插入图片描述 <template><div><a-selectv-model.lazy"i…

【论文阅读】基于深度学习的时序预测——Autoformer

系列文章链接 论文一&#xff1a;2020 Informer&#xff1a;长时序数据预测 论文二&#xff1a;2021 Autoformer&#xff1a;长序列数据预测 论文三&#xff1a;2022 FEDformer&#xff1a;长序列数据预测 论文四&#xff1a;2022 Non-Stationary Transformers&#xff1a;非平…

SwiftUI 动画进阶:实现行星绕圆周轨道运动

0. 概览 SwiftUI 动画对于优秀 App 可以说是布帛菽粟。利用美妙的动画我们不仅可以活跃界面元素,更可以单独打造出一整套生动有机的世界,激活无限可能。 如上图所示,我们用动画粗略实现了一个小太阳系:8大行星围绕太阳旋转,而卫星们围绕各个行星旋转。 在本篇博文中,您将…

力扣 213. 打家劫舍 II

题目来源&#xff1a;https://leetcode.cn/problems/house-robber-ii/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a; 对于一个数组&#xff0c;成环的话主要有如下三种情况&#xff1a;&#xff08;1&#xff09;考虑不包含首尾元素&#xff1b;&…

一生一芯4——使用星火应用商店在ubuntu下载QQ、微信、百度网盘

星火应用商店可以非常方便的完成一些应用的下载&#xff0c;下面是官方网址 http://spark-app.store/download 我使用的是intel处理器&#xff0c;无需下载依赖项&#xff0c;直接点击软件本体 我这里下载amd64,根据自己的处理器下载对应版本 sudo apt install ./spark-stor…

性能分析之MySQL慢查询日志分析(慢查询日志)

一、背景 MySQL的慢查询日志是MySQL提供的一种日志记录,他用来记录在MySQL中响应的时间超过阈值的语句,具体指运行时间超过long_query_time(默认是10秒)值的SQL,会被记录到慢查询日志中。 慢查询日志一般用于性能分析时开启,收集慢SQL然后通过explain进行全面分析,一…

Wordcloud | 风中有朵雨做的‘词云‘哦!~

1写在前面 今天可算把key搞好了&#xff0c;不得不说&#x1f3e5;里手握生杀大权的人&#xff0c;都在自己的能力范围内尽可能的难为你。&#x1f602; 我等小大夫也是很无奈&#xff0c;毕竟奔波霸、霸波奔是要去抓唐僧的。 &#x1f910; 好吧&#xff0c;今天是词云&#x…