使用Docker部署ZLMediaKit流媒体服务器实现gb/t28181协议的设备

最近在研究一个摄像头,通信协议是 gb/t28181。对于这个协议也是第一次接触,通过查阅多方资料,找到了两个开源的源码,来实现 视频播放、摄像头直播。以前也没有深入的了解过关于视频播放的这方面的技术,偶尔网站播放视频 也都是 mp4视频,通过html标签直接播放。通过这次的学习,对于视频播放的技术有了一部分的了解。这篇文章主要是讲解 怎么搭建一下 我找的这两个开源的源码服务,从来对gb/t28181协议的设备 进行一个管理。
源码1:ZLMediaKit
https://github.com/ZLMediaKit/ZLMediaKit
对于ZLMediaKit 源码 他提供 docker部署的 方案,所以我们就不需要下载源码自行编译了
这个服务 我们主要是用来做视频流转换与播放等等
源码2:wvp-GB28181-pro
https://github.com/648540858/wvp-GB28181-pro
对于这个源码 已经集成了各种设备协议和ZLMediaKit的使用。
他是带前后端的管理系统,如果你们已经有了前端页面。可以只是用他的后端,通过api的方式调用即可。

好了,简单的介绍了这两个项目。
接下来我们来搭建 ZLMediaKit

docker 部署:

  1. 拉取官方镜像
docker pull zlmediakit/zlmediakit:master
  1. 首次运行临时容器
docker run -d --name zlmediakit-tmp zlmediakit/zlmediakit:master
  1. 提取默认配置文件
# 创建宿主机配置目录
mkdir /home/zlmediakit/conf
# 复制容器内配置文件到宿主机
docker cp zlmediakit-tmp:/home/zlmediakit/conf/config.ini /opt/zlmediakit/conf/
# 删除临时容器
docker rm -f zlmediakit-tmp
  1. 修改config.ini配置文件
[api]
secret = your_custom_secret  # 必须修改默认值[rtp_proxy]# 端口范围需与容器映射一致 这个拉流的时候 随机使用的端口# 如果设备同时在线多 再增加即可 现在是500个端口
port_range = 30000-30500    [http]
port = 9092                    # 保持与容器映射端口对应 
allow_ip_range = 0.0.0.0/0   # 允许所有IP访问
ssl_port=443                 # 若开启HTTPS 默认443  也可以改成别的 8443[rtmp]
port=1935                    # 必须与Docker映射的容器端口一致[websocket]
port=9000                    # 若开启WebSocket[general]
mediaServerId = sdaafdgfdgferdz  #服务器唯一id 可自定义

配置文件别的 一般情况就不需要改了,当 wvp-GB28181-pro 源码启动的时候 和 ZLMediaKit 服务建立通信成功后 ,wvp-GB28181-pro 会把 一些参数 同步到 config.ini 配置文件里。

最后启动ZLMediaKit :
docker-compose.yml 文件方式启动:
大家可以根据自己的需求自行修改

version: "3.7"services:zlmediakit:image: zlmediakitports:- "1935:1935"       # rtmp 端口- "9092:9092"     # web 80端口- "8443:8443"     # web 443端口- "8554:8554"     # rtsp 端口- "10000:10000"     # rtp_proxy 端口- "10000:10000/udp" # rtp 代理端口 udp- "8000:8000/udp"   # rtc 端口- "9000:9000/udp"   # srt 端口- "30000-30500:30000-30500/tcp"  # rtp 代理端口范围(WebRTC/RTP转发)- "30000-30500:30000-30500/udp"  # rtp 代理端口范围(WebRTC/RTP转发)restart: alwayscontainer_name: zlmediakitvolumes:- /home/lianxi/ZLMediaKit/conf/config.ini:/opt/media/conf/config.ini  # 配置文件

注意:zlmediakit 服务的 9092 web 端口 通过浏览器可以直接访问,可以访问到一些目录结构,还不知道有没有安全方面的影响,目前不知道怎么关闭。有知道的小伙伴也欢迎留言~

这个 wvp-GB28181-pro 项目他默认是 3个 配置文件夹 我给他整合成1个了。
在这里插入图片描述
我修改后的 application.yml 配置文件 和上面的这个 docker-compose.yml是配到的。
更多配置 可以去翻看他的源码里有。

application.yml 内容:

spring:application:name: wvpprofiles:active: dev  # 设置接口超时时间mvc:async:request-timeout: 20000thymeleaf:cache: false  # [可选] 上传文件大小限制servlet:multipart:max-file-size: 10MBmax-request-size: 100MBcache:type: redis  # REDIS数据库配置redis:# [必须修改] Redis服务器IP, REDIS安装在本机的, 使用127.0.0.1host: 127.0.0.1  # [必须修改] 端口号port: 6379# [可选] 数据库 DBdatabase: 1# [可选] 访问密码, 若你的redis服务器没有设置密码,就不需要用密码去连接password: 123456# [可选] 超时时间timeout: 10000mysql:datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/gb28181?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=trueusername: rootpassword: root# [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
server:port: 18080
# [可选] HTTPS配置, 默认不开启ssl:# [可选] 是否开启HTTPS访问enabled: false# [可选] 证书文件路径,放置在resource/目录下即可,修改xxx为文件名key-store: classpath:test.monitor.89iot.cn.jks# [可选] 证书密码key-store-password: gpf64qmw# [可选] 证书类型, 默认为jks,根据实际修改key-store-type: JKS# 作为28181服务器的配置
sip:# [可选] 28181服务监听的端口port: 8116# 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007) 后两位为行业编码,定义参照附录D.3# [可选] domain: 4101050000# [可选] id: 41010500002000000001# [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验password: 12345678# 是否存储alarm告警信息alarm: false# zlm 默认服务器配置
media:id:  sdaafdgfdgferdz  # 要和 zlmediakit 服务配置文件里mediaServerId一致# [必须修改] zlm服务器的内网IPip: 192.168.0.110# [必须修改] zlm服务器的http.porthttp-port: 9092# 要和 zlmediakit docker映射的端口一致http-ssl-port: 8443rtmp-port: 1935rtsp-port: 8554# [必选选] zlm服务器的 secretsecret: tnc4XpPRdsasawQCaslpAsaaK
# 要和 zlmediakit 服务配置文件里secret一致rtp:# [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输enable: true# [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功port-range: 30000,30500  # 端口范围# [可选] 国标级联在此范围内选择端口发送媒体流, send-port-range: 30000,30500send-port-range: 30000,30500  # 端口范围# [根据业务需求配置]
user-settings:# 点播/录像回放 等待超时时间, 单位:毫秒play-timeout: 180000# [可选] 自动点播, 使用固定流地址进行播放时,如果未点播则自动进行点播, 需要rtp.enable=trueauto-apply-play: true# 推流直播是否录制record-push-live: false# 国标是否录制record-sip: false# 国标点播 按需拉流, true:有人观看拉流,无人观看释放, false:拉起后不自动释放stream-on-demand: true# 是否返回Date属性,true:不返回,避免摄像头通过该参数自动校时,false:返回,摄像头可能会根据该时间校时disable-date-header: falseserverId:  sdaafdgfdgferdz
# 关闭在线文档(生产环境建议关闭)
springdoc:api-docs:enabled: falseswagger-ui:enabled: false

对于 wvp-GB28181-pro 项目部署 这里就不说了 ,非常简单 把数据库 表导入到数据库 ,数据库配置一下
java8 环境 idea编辑器 启动即可

网上找的模拟设备协议工具 进行9屏播放效果
在这里插入图片描述

最后:非常感谢这些大佬们开源的源码,让我了解了这么多关于视频播放的相关编程知识,向大佬致敬~

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

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

相关文章

硬件三人行--运算基础篇

第3讲 负反馈放大电路

【LINUX网络】TCP原理

目录 本文介绍 1. 什么是TCP? 2. TCP结构 为什么需要协议栈:两台主机通信的复杂性解决方案 3. 确认应答机制 进一步理解什么是确认和请求以及序号 进一步理解什么是序号和确认序号 并发发送带来的问题以及解决方案(序号) …

Java -- 文件基础知识--Java IO流原理--FileReader

目录 1. 常用文件操作 2. Java IO流原理 2.1 流的分类 3. FileReader和FileWriter介绍 FileReader相关方法: FileWriter常用方法: 文件是保存数据的地方,比如大家经常使用的word文档,txt文件,excel文件...都是文…

向量方法证明正余弦定理的数学理论体系

向量方法证明正余弦定理的数学理论体系 摘要: 向量理论为几何定理的证明提供了强有力的代数化工具。本文基于向量空间的基本概念与运算性质,严格推导平面几何中的正弦定理与余弦定理。通过建立系统的向量表示框架,将几何关系转化为向量运算&a…

【笔记ing】大模型算法架构

前言 随着人工智能技术的飞速发展,大模型算法及其架构已成为推动科技前沿的重要力量。它们不仅能够处理海量的数据,还具备强大的表征学习能力,能够应对日益复杂的场景需求。本章节将介绍大模型算法及其架构,带您了解其背后的原理、技术创新以及在实际应用中的广阔前景。 …

ConcurrentHashMap的原理

1.底层数据结构JDK1.7底层采用分段的数组链表实现JDK1.8 采用的数据结构跟HashMap1.8的结构一样,数组链表/红黑二叉树2.加锁的方式JDK1.7采用Segment分段锁,底层使用的是ReentrantLockJDK1.8采用CAS添加新节点,采用synchronized锁定链表或红黑二叉树的首节点,相对Segment分段锁…

【论文阅读】健全个体无辅助运动期间可穿戴传感器双侧下肢神经机械信号的基准数据集

Benchmark Datasets for Bilateral Lower-Limb Neuromechanical Signals from Wearable Sensors during Unassisted Locomotion in Able-Bodied Individuals 原文:DOI: 10.3389/frobt.2018.00014 2018年 翻译:靠岸学术 目录 1引言 2仪器设…

反向海淘系统搭建:从架构设计到合规运营的全方位指南

一、系统架构设计1.1 分层架构设计反向海淘系统通常采用四层架构设计:‌接入层‌:负责与淘宝开放平台、1688海外接口通信,处理接口认证、请求转发与响应解析。‌业务层‌:包含商品检索、订单管理、支付处理、物流追踪等核心模块。…

20.22 QLoRA微调实战:中文语音识别数据准备全流程解密

QLoRA微调实战:中文语音识别数据准备全流程解密 实战项目:QLoRA 微调数据准备详解 本环节我们将以中文语音识别任务为场景,详细拆解 QLoRA 微调前的数据准备流程。以下流程图展示了完整的数据处理路径: #mermaid-svg-A3ZpWn1ysZUg6jg4 {font-family:"trebuchet ms&q…

工业电子看板赋能线缆工厂生产高效运转

在制造业智能化转型的浪潮中,工业电子看板已不再只是“显示数据的屏幕”,而是成为连接设备层、控制层与管理层的实时信息枢纽。尤其在线缆制造这类对工艺参数敏感、生产连续性要求高的行业中,电子看板通过对关键数据的透明化、实时化与交互化…

Java爬虫是什么,如何获取API接口

一、Java爬虫的定义Java爬虫是一种基于Java编程语言开发的网络爬虫程序。它通过模拟浏览器行为,向目标网站发送HTTP请求,获取网页内容并解析出所需数据。Java爬虫技术广泛应用于数据采集、市场分析、竞争情报等领域。二、Java爬虫获取API接口的方法&…

Python篇---返回类型

基础返回类型:在 Python 中,函数的返回类型就像函数 “产出” 的不同 “物品”,理解它们能帮你更好地控制代码的输出。下面用通俗的方式介绍常见的返回类型及用法:一、最基础的返回类型1. 无返回值(None)特…

ArkTS 与 TypeScript 的关系及鸿蒙开发常见错误案例

随着 HarmonyOS NEXT(纯血鸿蒙) 的到来,开发者在学习鸿蒙应用开发时会遇到一个新的语言 —— ArkTS。很多人会疑惑:它和 TypeScript(TS)是什么关系?又有哪些新的特性?在实际开发中&a…

初识socket编程(实现一个简单的TCPServer)

监听套接字的创建流程 在网络编程中,listen 套接字(通常称为“监听套接字”)是服务器端用于接收客户端连接请求的特殊套接字,是 TCP 服务器建立连接过程中的核心组件。下面我们就来简单看一下监听套接字创建的过程创建流程&#x…

开发者如何在 Gitee 上开源一个自己的项目

文章目录一、为什么要在 Gitee 上开源?1. 开源的价值2. 为什么是 Gitee?二、前期准备:让项目“可开源”1. 项目代码整理2. 添加必要文件3. 确定开源许可证三、在 Gitee 上创建仓库四、推送本地代码到 Gitee五、完善项目展示(吸引力…

卷积神经网络实现mnist手写数字集识别案例

手写数字识别是计算机视觉领域的“Hello World”,也是深度学习入门的经典案例。它通过训练模型识别0-9的手写数字图像(如MNIST数据集),帮助我们快速掌握神经网络的核心流程。本文将以PyTorch框架为基础,带你从数据加载…

实战笔记——构建智能Agent:SpreadJS代码助手

目录 前言 解决思路 需求理解 MCP Server LangGraph 本教程目标 技术栈 第一部分:构建 MCP Server - 工具服务化的基础架构 第二部分:Tools 实现 第三部分:基于 LangGraph 构建智能 Agent 第四部分:服务器和前端搭建 前…

【Word】用 Python 轻松实现 Word 文档对比并生成可视化 HTML 报告

在日常工作和学习中,我们经常需要对两个版本的文档进行比对,比如合同修改、论文修订、报告更新等。手动逐字检查不仅耗时费力,还容易遗漏细节。 今天,我将带你使用 Python python-docx difflib 实现一个自动化 Word 文档对比工具…

从0开始搭建一个前端项目(vue + vite + typescript)

版本 node:v22.17.1 pnpm:v10.13.1 vue:^3.5.18 vite:^7.0.6 typescipt:~5.8.0脚手架初始化vue pnpm create vuelatest只选择: TypeScript, JSX 3. 用vscode打开创建的项目,并删除多余的代码esl…

1.ImGui-环境安装

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 IMGUI是一个被广泛应用到逆向里面的,它可以用来做外部的绘制,比如登录界面&…