🛠️ ZLMediaKit 媒体服务器 —— 企业级部署与配置指南
高性能 · 低延迟 · 企业级流媒体底座 基于 ZLMediaKit 的分布式流媒体服务配置指南,确保视频流的稳定接入与分发。
📥 第一步:环境获取与安装
请根据您的服务器环境,下载并安装对应的 ZLMediaKit 版本。
| 环境 | 获取方式 | 适用场景 |
|---|---|---|
| Linux | 官方 Release 或 源码编译 | 推荐:CentOS/Ubuntu 生产环境 |
| Windows | 官方 Release | 仅推荐:开发与测试环境 |
官方源码仓库: ZLMediaKit/ZLMediaKit
⚙️ 第二步:服务端核心配置 (config.ini)
进入 ZLMediaKit 安装目录,找到 config.ini 文件进行关键参数修改。
1. 基础服务配置
请务必修改以下核心字段,确保服务安全与唯一性。
ini
# 服务器唯一标识 (必须修改)
[general]
mediaServerId=ruoyi_nvr_zlm_01
# API 安全密钥 (必须修改,用于Java后端Hook验证)
secret=your_secure_hook_secret_key
# 网络端口配置
[http]
# HTTP 服务端口 (默认80,若被占用请修改)
port=802. 启动服务
- Windows: 双击运行 MediaServer.exe。
- Linux: 给予执行权限并运行 ./MediaServer。
3.验证:
启动成功后,访问 http://127.0.0.1:你配置的端口/。若无法访问,请检查进程是否启动或端口是否被占用。
🔗 第三步:Nacos 配置中心对接
在 application-dev.yml 中,配置 ZLM 客户端参数。
- 配置参数详解 (YAML)
YML
media:
# [必填] 对应 config.ini 中的 mediaServerId
id: ruoyi_nvr_zlm_01
# [必填] ZLM 服务器内网 IP
# 如果是本地测试填 127.0.0.1,生产环境填服务器内网IP
ip: zlm服务ip
# [必填] ZLM 服务器的 http.port
http-port: 80
# [可选] ZLM 服务器的 hook 所使用的 IP
# 默认使用 sip.ip,若有多网卡需指定具体 IP
hook-ip: java服务ip
# [必填] 对应 config.ini 中的 secret
# 用于后端验证 ZLM 的 Hook 请求合法性
secret: your_secure_hook_secret_key
# RTP 传输策略配置
rtp:
# [可选] 是否启用多端口模式
# 建议设为 true,单端口模式 (false) 仅建议用于点播测试
enable: true
# [可选] 在此范围内选择端口用于媒体流传输
# 必须与 config.ini 中的 portRange 保持一致
port-range: 30000,30500
# [可选] 国标级联在此范围内选择端口发送媒体流
# 必须与 config.ini 中的 sendPortRange 保持一致
send-port-range: 30000,30500- 关键参数映射表
| Java 配置项 | 对应 ZLM 字段 | 说明 |
|---|---|---|
media.id | mediaServerId | 服务器唯一 ID,必须一致 |
media.secret | secret | Hook 回调密钥,必须一致 |
media.rtp.enable | rtp.enable | 传输模式开关 |
▶️ 第四步:服务启动与验证
- 启动 ZLM:确保流媒体服务已在后台运行。
- 启动 Java 模块:运行 RuoYiZlmApplication。
- 日志检查:
- 若控制台输出 zlm服务连接成功,则表示配置无误,连接已建立。
- 若报错,请检查 IP、端口及 Secret 是否一致。
💡 专家级运维建议 (Tips)
防火墙策略 (关键): 开启 enable: true (多端口模式) 后,ZLM 会随机使用 30000-40500 范围内的 UDP 端口传输视频流。务必在服务器防火墙及云服务商安全组中开放该 UDP 端口段,否则视频画面无法播放。
单端口 vs 多端口模式:
- 多端口模式 (true):推荐生产环境使用。使用不同端口区分每一路流,兼容性好,不易丢包。
- 单端口模式 (false):仅使用一个端口,通过 SSRC 区分流。对网络环境要求高,仅建议在端口受限的测试环境使用。
Secret 一致性校验: Java 后端与 ZLM 服务端的 Secret 必须完全一致。若不一致,ZLM 的 Hook 回调将被 Java 拒绝,导致设备显示在线但无法拉流(无画面)。
