当前位置: 首页 > article >正文

保姆级教程:在Ubuntu 22.04上从零部署wvp-GB28181-pro国标视频平台(含ZLMediaKit)

从零构建GB28181视频监控平台Ubuntu 22.04下的wvp-pro与ZLMediaKit深度整合指南在智能安防与视频监控领域GB28181协议已成为行业标准协议而wvp-pro作为开源实现方案配合ZLMediaKit流媒体服务器能够快速搭建起功能完整的视频管理平台。本文将彻底拆解从系统准备到服务联调的完整过程不仅提供可复制的命令行操作更会深入关键配置背后的设计逻辑帮助开发者建立系统级的认知框架。1. 环境准备与依赖治理搭建视频平台的第一步是构建稳定的基础运行环境。Ubuntu 22.04 LTS作为长期支持版本提供了良好的软件兼容性。但需要注意不同组件对系统资源的消耗差异显著建议部署在至少4核CPU、8GB内存的物理机或虚拟机环境。关键组件版本矩阵组件推荐版本兼容范围备注JavaOpenJDK 118-17必须匹配Spring Boot版本Node.js18.x LTS16-20前端构建依赖MySQL8.05.7需启用InnoDB引擎Redis6.25.0用作消息队列与缓存系统级依赖安装需要特别注意编译工具链的完整性# 基础构建工具链必须 sudo apt update sudo apt install -y build-essential cmake pkg-config # 多媒体处理库按需选择 sudo apt install -y libssl-dev ffmpeg libavcodec-dev libavutil-dev提示Ubuntu默认的openssl版本可能与某些流媒体组件存在兼容性问题若遇到TLS连接错误可考虑从源码编译openssl 1.1.1版本。2. 核心组件编译实战2.1 ZLMediaKit编译优化流媒体服务器的编译过程对系统资源消耗较大采用正确的编译参数可显著提升效率git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit git submodule update --init --recursive # 启用编译缓存和并行编译 mkdir -p build cd build cmake .. -DCMAKE_BUILD_TYPERelease -DENABLE_WEBRTCON make -j$(nproc) # 自动检测CPU核心数编译完成后重点检查以下输出文件release/linux/Release/MediaServer主程序二进制release/linux/Release/libmk_api.soC语言接口库tests/test_*各模块功能测试程序2.2 wvp-pro的混合编译策略wvp-pro采用前后端分离架构需要分别处理前端构建技巧cd wvp-GB28181-pro/web_src/ # 使用国内镜像加速依赖下载 npm config set registry https://registry.npmmirror.com npm install --legacy-peer-deps # 处理依赖冲突 npm run build -- --modern # 启用现代模式构建后端Java打包注意事项# 清理历史构建产物 mvn clean # 跳过测试加快构建速度 mvn package -Dmaven.test.skiptrue -Pprod构建产物验证要点target/wvp-pro-*.jar可执行JAR包target/classes/static/前端资源嵌入位置target/generated-docs/API文档如有3. 配置工程化实践3.1 数据库拓扑设计为保障系统高可用建议采用主从数据库架构# application.yml片段示例 datasource: dynamic: primary: master datasource: master: url: jdbc:mysql://主库IP:3306/wvp?useSSLfalse username: wvp_admin password: StrongPassword123 slave: url: jdbc:mysql://从库IP:3306/wvp?useSSLfalse username: wvp_reader password: ReadOnly456配套的MySQL初始化脚本应包含独立的业务数据库用户非root明确的权限划分读写/只读合理的字符集设置utf8mb43.2 网络拓扑与安全配置SIP信令服务器关键参数sip: ip: 内网通信IP # 用于服务器间通信 public-ip: 公网IP # 设备注册用 port: 5060 domain: 3402000000 # 行政区域码 id: 34020000002000000001 # 厂商编码设备类型媒体流安全传输方案在ZLMediaKit中启用HTTPS[http] sslport 443 ssl_cert /path/to/fullchain.pem ssl_key /path/to/privkey.pem配置wvp-pro强制HTTPS跳转server: ssl: enabled: true key-store: classpath:keystore.p12 key-store-password: changeit4. 服务部署与调优4.1 系统服务化部署采用systemd管理服务可提高可靠性ZLMediaKit服务单元# /etc/systemd/system/zlm.service [Unit] DescriptionZLMediaKit Streaming Server Afternetwork.target [Service] Typesimple Usermedia WorkingDirectory/opt/zlm ExecStart/opt/zlm/MediaServer -c /etc/zlm/config.ini Restartalways [Install] WantedBymulti-user.targetwvp-pro服务优化参数# JVM内存配置建议8GB内存机器 java -Xms4g -Xmx6g -XX:MaxMetaspaceSize512m \ -jar wvp-pro.jar --spring.config.locationfile:/etc/wvp/application.yml4.2 性能监控与调优关键监控指标采集方案媒体服务器监控# 实时获取ZLMediaKit状态 curl http://localhost:8080/api/serverConfigJava应用监控启用Spring Boot Actuator端点配置Prometheus指标采集数据库性能分析-- MySQL慢查询分析 SET GLOBAL slow_query_log ON; SET GLOBAL long_query_time 1;流媒体参数调优表参数项默认值建议值影响范围rtp_proxy.port_range30000-35000自定义范围并发流数http.maxReqSize40968192API请求大小protocol.keepAliveSec1530连接保持时间hls.segNum35HLS切片数量5. 设备对接与故障排查5.1 国标设备注册流程标准注册时序分析设备发送REGISTER请求到SIP服务器wvp-pro响应401鉴权挑战设备携带鉴权信息重新注册服务端返回200 OK完成注册常见注册失败场景SIP域不匹配检查domain配置一致性鉴权失败核对密码和ID编码规则NAT穿越问题配置正确的公网IP和端口映射5.2 媒体流调试技巧使用FFmpeg进行流诊断# 测试RTSP流可达性 ffmpeg -rtsp_transport tcp -i rtsp://流地址 -vframes 1 -f null - # 提取关键帧分析 ffprobe -show_frames -select_streams v 流地址 | grep key_frameWireshark抓包过滤条件SIP信令sip || udp.port 5060RTP流rtp !sipRTCP控制协议rtcp6. 平台扩展与二次开发6.1 API集成开发wvp-pro提供的开放接口包括/api/v1/device/list设备列表查询/api/v1/play/start实时流点播/api/v1/playback/start录像回放典型调用示例import requests auth (admin, admin123) api_base http://服务器IP:18080 # 查询在线设备 resp requests.get(f{api_base}/api/v1/device/online, authauth) devices resp.json()[data] # 发起实时播放 play_body { deviceId: devices[0][deviceId], channelId: devices[0][channels][0][channelId] } requests.post(f{api_base}/api/v1/play/start, jsonplay_body, authauth)6.2 插件开发指南自定义Hook处理流程实现io.github.wvp.interfaces包下的接口通过Spring的Component注解注册Bean在application.yml中启用自定义处理典型Hook点包括DeviceRegisterHook设备上下线通知StreamChangeHook流状态变化回调RecordHook录像事件处理实际部署中发现合理配置JVM堆内存能显著减少GC停顿对视频流畅度的影响。对于8GB内存的服务器建议将Xmx设置为6GB左右同时预留足够内存给Native组件使用。

相关文章:

保姆级教程:在Ubuntu 22.04上从零部署wvp-GB28181-pro国标视频平台(含ZLMediaKit)

从零构建GB28181视频监控平台:Ubuntu 22.04下的wvp-pro与ZLMediaKit深度整合指南 在智能安防与视频监控领域,GB28181协议已成为行业标准协议,而wvp-pro作为开源实现方案,配合ZLMediaKit流媒体服务器,能够快速搭建起功能…...

如何彻底解决百度网盘分享链接失效问题:秒传脚本终极指南

如何彻底解决百度网盘分享链接失效问题:秒传脚本终极指南 【免费下载链接】rapid-upload-userscript-doc 秒传链接提取脚本 - 文档&教程 项目地址: https://gitcode.com/gh_mirrors/ra/rapid-upload-userscript-doc 你是否经常遇到百度网盘分享链接失效的…...

如何快速清理电脑重复图片?AntiDupl.NET免费开源工具终极指南

如何快速清理电脑重复图片?AntiDupl.NET免费开源工具终极指南 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否经常发现电脑里存着大量相同的照片&…...

桥梁与翻译器:VRM Addon for Blender在虚拟角色创作中的哲学意义

桥梁与翻译器:VRM Addon for Blender在虚拟角色创作中的哲学意义 【免费下载链接】VRM-Addon-for-Blender VRM Importer, Exporter and Utilities for Blender 2.93 to 5.1 项目地址: https://gitcode.com/gh_mirrors/vr/VRM-Addon-for-Blender 在数字创作的…...

终极指南:应届生如何利用ShameCom有效规避职业风险

终极指南:应届生如何利用ShameCom有效规避职业风险 【免费下载链接】ShameCom 收集校招污点公司或组织,帮助学弟学妹避雷。互联网不曾遗忘! 项目地址: https://gitcode.com/gh_mirrors/sh/ShameCom 在竞争激烈的校招季,应届…...

如何在10分钟内掌握自动化操作?告别重复工作的新选择

如何在10分钟内掌握自动化操作?告别重复工作的新选择 【免费下载链接】KeymouseGo 类似按键精灵的鼠标键盘录制和自动化操作 模拟点击和键入 | automate mouse clicks and keyboard input 项目地址: https://gitcode.com/gh_mirrors/ke/KeymouseGo 你是否曾在…...

如何快速掌握Iwara视频下载:面向新手的完整指南与批量处理神器

如何快速掌握Iwara视频下载:面向新手的完整指南与批量处理神器 【免费下载链接】IwaraDownloadTool Iwara 下载工具 | Iwara Downloader 项目地址: https://gitcode.com/gh_mirrors/iw/IwaraDownloadTool 作为动漫爱好者和视频收藏者,你是否曾经为…...

STM32控制28BYJ-48步进电机的三种驱动方式对比(单四拍/双四拍/八拍)及串口角度监控实战

STM32控制28BYJ-48步进电机的三种驱动方式对比及实战优化 在嵌入式开发中,精确控制电机运动是一个永恒的话题。28BYJ-48这款经济实惠的步进电机,配合ULN2003驱动板,成为了许多STM32开发者入门电机控制的经典组合。但你是否真正理解单四拍、双…...

明日方舟游戏资源宝库:1000+高清素材免费获取与实用指南

明日方舟游戏资源宝库:1000高清素材免费获取与实用指南 【免费下载链接】ArknightsGameResource 明日方舟客户端素材 项目地址: https://gitcode.com/gh_mirrors/ar/ArknightsGameResource 还在为明日方舟同人创作寻找素材而烦恼?想要获取高清角色…...

Modern C++ Features协程编程指南:C++20异步编程新范式

Modern C Features协程编程指南:C20异步编程新范式 【免费下载链接】modern-cpp-features A cheatsheet of modern C language and library features. 项目地址: https://gitcode.com/gh_mirrors/mo/modern-cpp-features C20引入的协程是现代C异步编程的革命…...

别再到处找汉化包了!QGIS 3.28 最新版中文界面设置保姆级教程

QGIS 3.28 中文界面设置全攻略:告别汉化包的终极解决方案 第一次打开QGIS时,满屏的英文菜单是否让你望而却步?作为一款功能强大的开源地理信息系统软件,QGIS在全球拥有数百万用户,但语言障碍却成为许多中文用户的第一…...

从CentOS迁移到国产系统?手把手教你用U盘安装统信UOS服务器版1060e

从CentOS迁移到统信UOS服务器版的完整实践指南 在开源生态变革的浪潮中,许多企业正面临从CentOS向替代方案迁移的技术挑战。统信UOS服务器版作为国产操作系统的代表之一,凭借其良好的硬件兼容性、完善的安全机制和本地化支持,正成为越来越多…...

别再只当开关用了!手把手教你用p-GaN HEMT在GaN芯片上实现高性能电容

解锁p-GaN HEMT的隐藏技能:片上高性能电容设计实战指南 在GaN功率集成电路设计中,工程师们常常面临一个棘手的问题:如何在有限的芯片面积内集成更多功能模块?传统解决方案是增加MIM(金属-绝缘体-金属)电容&…...

【体验优化】Claude Code v2.1.132:终端兼容性大修,告别 Emoji 导致崩溃的 Bug

前言在使用 Claude Code 时,你是否遇到过屏幕休眠唤醒后黑屏?或者因为终端里的一个 Emoji 符号导致会话无法恢复?在最新的 v2.1.132 版本中,开发团队针对这些深层的交互逻辑和边缘情况进行了地毯式的修复。无论你是 JetBrains 用户…...

Linux内核漏洞分类终极指南:按类型和影响程度深度解析

Linux内核漏洞分类终极指南:按类型和影响程度深度解析 【免费下载链接】linux-kernel-exploits linux-kernel-exploits Linux平台提权漏洞集合 项目地址: https://gitcode.com/gh_mirrors/li/linux-kernel-exploits Linux内核漏洞是影响系统安全性的关键因素…...

AndroidVideoCache终极安全漏洞解析:2025年CVE漏洞修复完整指南

AndroidVideoCache终极安全漏洞解析:2025年CVE漏洞修复完整指南 【免费下载链接】AndroidVideoCache Cache support for any video player with help of single line 项目地址: https://gitcode.com/gh_mirrors/an/AndroidVideoCache AndroidVideoCache是一款…...

【CLIP 范式已死!】字节发布 【GenLIP】:砍掉解码器与对比学习,让 ViT 直接开口说话,效果反而更强

CLIP 范式已死!字节发布 GenLIP:砍掉解码器与对比学习,让 ViT 直接开口说话,效果反而更强 写在前面(2026.05.07 首发):2026 年 5 月 1 日,arXiv 上出现了一篇来自北京交通大学 字节…...

终极指南:如何利用Kubernetes命名空间实现ThingsBoard多租户网络隔离

终极指南:如何利用Kubernetes命名空间实现ThingsBoard多租户网络隔离 【免费下载链接】thingsboard Open-source IoT Platform - Device management, data collection, processing and visualization. 项目地址: https://gitcode.com/GitHub_Trending/th/thingsbo…...

终极指南:Chameleon框架热更新方案——无需发版轻松实现色彩配置动态更新

终极指南:Chameleon框架热更新方案——无需发版轻松实现色彩配置动态更新 【免费下载链接】chameleon Color framework for Swift & Objective-C (Gradient colors, hexcode support, colors from images & more). 项目地址: https://gitcode.com/gh_mirr…...

分布式代理池终极指南:如何将 haipproxy 与 Scrapy 完美集成

分布式代理池终极指南:如何将 haipproxy 与 Scrapy 完美集成 【免费下载链接】haipproxy :sparkling_heart: High available distributed ip proxy pool, powerd by Scrapy and Redis 项目地址: https://gitcode.com/gh_mirrors/ha/haipproxy haipproxy 是一…...

Multisim 14.0 保姆级教程:从零搭建一个LED闪烁电路(附完整仿真流程)

Multisim 14.0 实战入门:手把手教你构建LED呼吸灯电路 第一次打开Multisim时,满屏的元器件和仪器图标可能让人望而生畏。但别担心,我们今天要做的LED呼吸灯项目,正是打开电子仿真世界大门的最佳钥匙。这个经典的小电路不仅能让你快…...

从PyTorch Geometric实战出发:手把手教你用GAT和GraphSAGE搞定节点分类(附完整代码与调参心得)

从PyTorch Geometric实战出发:手把手教你用GAT和GraphSAGE搞定节点分类(附完整代码与调参心得) 当学术论文中的图神经网络公式遇上真实数据集,很多工程师都会遇到这样的困境:明明理解了GAT的注意力机制和GraphSAGE的采…...

大型后台应用的构建优化:10个提升性能的高级实践

大型后台应用的构建优化:10个提升性能的高级实践 【免费下载链接】vue-element-admin :tada: A magical vue admin https://panjiachen.github.io/vue-element-admin 项目地址: https://gitcode.com/gh_mirrors/vu/vue-element-admin 在当今数字化时代&#…...

从Arduino项目到量产:你的元器件供应链能撑过产品整个生命周期吗?

从Arduino原型到商业量产:破解电子元器件供应链的生命周期困局 当你熬夜调试完最后一个Arduino模块,看着亲手打造的硬件原型完美运行,那种成就感无与伦比。但真正的考验往往始于产品走出工作室的那一刻——我见过太多充满创意的硬件项目&…...

【大白话说Java面试题】【Java基础篇】第35题:怎样声明一个类不会被继承?什么场景下会用

第35题:怎样声明一个类不会被继承?什么场景下会用 📚 回答: 核心概念: 在 Java 中,可以通过在类声明前添加 final 关键字来禁止该类被继承。 1. 声明方式 语法:final class MyClass {// 类的…...

如何通过DDIA数据编码技术实现数据传输的终极安全保障

如何通过DDIA数据编码技术实现数据传输的终极安全保障 【免费下载链接】ddia 《Designing Data-Intensive Application》DDIA 第一版 / 第二版 中文翻译 项目地址: https://gitcode.com/gh_mirrors/dd/ddia 《Designing Data-Intensive Application》(DDIA&a…...

Mailin快速入门:10分钟搭建企业级邮件接收服务器

Mailin快速入门:10分钟搭建企业级邮件接收服务器 【免费下载链接】mailin Artisanal inbound emails for every web app 项目地址: https://gitcode.com/gh_mirrors/ma/mailin Mailin是一款轻量级的企业级邮件接收服务器解决方案,能够帮助开发者快…...

【大白话说Java面试题】【Java基础篇】第34题:String、StringBuffer和StringBuilder的区别是什么

第34题:String、StringBuffer和StringBuilder的区别是什么 📚 回答: 核心对比: String、StringBuffer 和 StringBuilder 是 Java 中处理字符串的三种主要方式,它们在可变性、线程安全性和性能上有显著差异。以下是详…...

告别手动解析!用CANdb++从零制作DBC文件保姆级教程(附Intel/Motorola格式详解)

告别手动解析!用CANdb从零制作DBC文件保姆级教程(附Intel/Motorola格式详解) 在汽车电子和嵌入式系统开发中,CAN总线通信是核心技术之一。但面对原始的CAN数据流,很多工程师都会感到困惑——这些十六进制数字究竟代表什…...

科新永安电子锁-酒店门锁-幽冥大陆(一百19)—东方仙盟

门锁转换门锁常见故障自助解决2声---正确提示,表示是设置卡 3声---门锁已反锁,解决方法:用能开反锁的卡或解除反锁 6声---房号不对,解决方法:设置门锁的房号 7声---卡已过期,解决方法:设置门锁的…...