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

Docker化国标视频平台:WVP-PRO与ZLMediaKit的协同部署实战

1. 环境准备与基础概念

在开始部署之前,我们需要先理解几个关键组件的作用。WVP-PRO是一个符合GB/T 28181标准的视频平台,负责设备管理、信令交互和业务逻辑处理;ZLMediaKit则是高性能流媒体服务器,负责媒体流的接收、转码和分发。将它们打包成Docker容器后,可以大幅简化部署流程,避免环境依赖问题。

我推荐使用Ubuntu 20.04 LTS作为基础系统,实测这个版本对Docker的兼容性最稳定。首先更新系统并安装必要工具:

sudo apt update && sudo apt upgrade -y sudo apt install -y curl vim net-tools

接着安装Docker引擎,这里有个小技巧——使用国内镜像源加速安装:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun sudo systemctl enable docker && sudo systemctl start docker

验证安装是否成功时,我习惯用这个组合命令:

docker --version && docker run hello-world

如果看到"Hello from Docker!"的提示,说明环境已经就绪。这时候建议做个系统快照,我在实际部署中遇到过多次因为环境问题需要回滚的情况,这个习惯帮我节省了大量时间。

2. WVP-PRO容器部署实战

2.1 容器启动与端口规划

WVP-PRO需要暴露多个端口,这里有个容易踩坑的地方——UDP和TCP端口需要分别映射。下面是经过生产验证的启动命令:

docker run -d \ --env WVP_IP=192.168.1.100 \ -e MEDIA_SDP_IP=192.168.1.101 \ -e MEDIA_STREAM_IP=192.168.1.101 \ -p 18080:18080 \ -p 5060:5060/tcp -p 5060:5060/udp \ -p 30000-30500:30000-30500/tcp \ -p 30000-30500:30000-30500/udp \ --name wvp \ --restart unless-stopped \ wangwuli/wvp:2.7.1-2024110702

参数说明:

  • WVP_IP:WVP服务所在服务器的真实IP
  • MEDIA_SDP_IP/MEDIA_STREAM_IP:ZLMediaKit服务器的IP
  • 端口30000-30500范围是媒体流传输端口,范围大小可根据设备数量调整

2.2 关键配置详解

进入容器修改配置有两种推荐方式:

  1. 直接编辑容器内文件:
docker exec -it wvp /bin/bash vim config/application.yml
  1. 更安全的做法是复制到宿主机修改后回传:
docker cp wvp:/opt/wvp/config ./wvp-config # 本地修改完成后 docker cp ./wvp-config wvp:/opt/wvp/config

这些配置项需要特别注意:

sip: ip: ${WVP_HOST:0.0.0.0} # 必须设置为服务器真实IP port: ${WVP_PORT:5060} # SIP信令端口 domain: 4401020049 # 行政区划代码 id: 44010200492000000001 # 设备ID规范 media: id: zlm1 # 必须与ZLMediaKit配置一致 ip: ${ZLM_HOST:192.168.1.101} http-port: ${ZLM_PORT:80} secret: icetc # API通信密钥 rtp: enable: true # 启用多端口模式 port-range: 30000,30500 # 媒体端口范围

3. ZLMediaKit流媒体服务部署

3.1 容器化部署技巧

ZLMediaKit的部署相对简单,但端口映射需要特别注意:

docker run -d \ -p 1935:1935 \ # RTMP协议端口 -p 8080:80 \ # HTTP API/FLV/HLS端口 -p 554:554 \ # RTSP端口 -p 10000:10000 \ # WebRTC端口 -p 10000:10000/udp \ -p 8000:8000/udp \ # RTP over UDP --name zlmediakit \ --restart unless-stopped \ zlmediakit/zlmediakit:master

建议在启动前先创建持久化目录,方便后续管理录像文件:

mkdir -p /data/zlm/record docker run ... -v /data/zlm/record:/zlmediakit/record ...

3.2 核心配置调整

进入容器修改配置文件:

docker exec -it zlmediakit /bin/bash vim /zlmediakit/conf/config.ini

关键配置项:

[general] mediaServerId=zlm1 # 必须与WVP配置一致 [api] secret=icetc # 与WVP的media.secret相同 enable_ip_blacklist=0 [rtp] port_range=30000-30500 # 与WVP的rtp.port-range对应 [hls] broadcast_record_ts=0

4. 服务联调与测试

4.1 网络连通性验证

先检查基础网络:

# 从WVP容器ping ZLMediaKit docker exec -it wvp ping 192.168.1.101 # 测试API连通性 curl http://192.168.1.101:8080/index/api/getServerConfig

4.2 设备注册流程

  1. 在WVP管理界面添加设备:

    • 设备ID:摄像头厂商提供的20位国标编号
    • 密码:设备认证密码
    • 传输协议:通常选择UDP
  2. 摄像头配置要点:

    • SIP服务器地址填写WVP的IP和端口
    • 域编码与WVP配置的domain一致
    • 传输协议保持与WVP配置相同

4.3 常见问题排查

我遇到过最多的问题集中在媒体流传输上,这里分享几个诊断命令:

检查端口监听状态:

netstat -tunlp | grep -E '5060|30000|8080'

查看Docker日志:

docker logs -f --tail 100 wvp docker logs -f --tail 100 zlmediakit

测试媒体流推流:

ffmpeg -re -i test.mp4 -vcodec copy -acodec copy -f flv rtmp://192.168.1.101/live/stream1

5. 生产环境优化建议

5.1 性能调优参数

在WVP的application.yml中添加:

server: tomcat: max-threads: 200 min-spare-threads: 20

ZLMediaKit的config.ini优化:

[thread] rtmp_thread_num=4 general_thread_num=4

5.2 高可用方案

对于关键业务场景,建议:

  1. ZLMediaKit集群部署:

    • 多个ZLM实例配置相同的mediaServerId
    • 前端用Nginx做负载均衡
  2. 数据库外置:

    docker run ... -e SPRING_DATASOURCE_URL=jdbc:mysql://mysql-server:3306/wvp ...
  3. 日志持久化:

    docker run ... -v /data/wvp/logs:/opt/wvp/logs ...

5.3 监控与维护

推荐使用Prometheus监控方案:

  1. WVP暴露metrics端点:

    management: endpoints: web: exposure: include: health,info,metrics
  2. ZLMediaKit状态获取:

    curl http://localhost:8080/index/api/getStatistic

在部署过程中,我发现最耗时的往往是网络策略配置。建议先关闭防火墙测试基础功能,再逐步添加安全规则。对于企业级部署,一定要规划好端口分配方案,避免后期扩展时出现冲突。

http://www.jsqmd.com/news/604586/

相关文章:

  • 专业级二维码生成器功能对比:为何二维彩虹是设计与商务的终极优选? - 企业推荐官【官方】
  • 【Java】TOP-K问题
  • 实战演练:用快马AI快速打造集成终端功能的服务器监控与部署面板
  • 当 AI 开始一本正经地胡说八道:DeepSeek 幻觉率 14%给技术人的警示
  • 面向嘈杂语音的对话建模新挑战
  • 手把手教你用Python实现TOTP动态验证码生成器(附完整代码)
  • AI同事抑郁症诊断报告:大模型存在主义危机爆发
  • 牧苏苏传 辣个男人回来了 4/6
  • 2026最权威的五大降AI率平台实际效果
  • 焊接仓储笼、仓储箱、周转箱、网格铁框、金属周转箱、仓储货架网、仓储货架网片厂家电话 - 企业推荐官【官方】
  • 我用Hermes Agent的经历——对比OpenClaw
  • 硕博生一定要尽快掌握用AI绘图啊!!
  • 电-气综合能源系统能量与备用调度:基于Wasserstein距离和CVaR条件风险价值的分布鲁...
  • 快速降AI率哪款工具最值得试?按需求推荐 - 我要发一区
  • Rust所有权与借用规则深度解析:从踩坑到理解
  • 面向对象高级(多态)
  • 想找国内知名光变UV变色纱线生产厂家?这3家值得关注 - 企业推荐官【官方】
  • 靠谱的厚板吸塑实力厂家 - 企业推荐官【官方】
  • 手把手教你用R-Studio恢复误删文件:从下载到恢复的保姆级避坑指南
  • 告别数据映射困惑:手把手教你配置ADRV9009的JESD204B接口(以BR3109为例)
  • 鼎捷T100程序开发实战:从核心类型到高效开发全解析
  • Windows系统性能优化全景指南:从诊断到长效管理的科学路径
  • 【OpenCode】opencode配置minimax2.7【day2】
  • 语文_中考_古诗词
  • 双编码器在UR5机器人零力拖动中的实现与优化
  • YALMIP求解器设置避坑指南:从`verbose`到`relax`,这些参数设置错了可能让你白算一整天
  • 终极Windows右键菜单优化指南:如何用ContextMenuManager快速清理杂乱菜单
  • CVPR/ICCV跟踪新趋势解读:对比学习如何让MOT模型学会“认人”?
  • 夜光荧光发光纱线生产厂家怎么选?认准正规靠谱源头不踩坑 - 企业推荐官【官方】
  • 从游戏AI到机器人:PPO算法在5个真实项目中的应用实战解析