在 Linux 环境下安装 ZLMediaKit(一款高性能流媒体服务器框架)并实现视频推流,需完成环境准备、源码编译/安装、配置调优及推流测试等步骤。以下是详细操作指南:
一、ZLMediaKit 简介
ZLMediaKit 是一个基于 C++17 的跨平台流媒体服务器框架,支持 RTMP、RTSP、WebRTC、HLS、HTTP-FLV 等主流协议,适用于直播、视频会议、监控等场景。其核心优势是高性能(基于 epoll/kqueue)、低延迟(毫秒级)、模块化设计(支持自定义扩展)。
二、前置条件
- Linux 系统:推荐 Ubuntu 20.04+/CentOS 7+(需支持 C++17、GCC 7+、CMake 3.13+)。
- 依赖库:需安装基础开发工具链、网络库(如
libssl
)、音视频编解码库(如libx264
、libfdk-aac
)等。
三、安装 ZLMediaKit
ZLMediaKit 支持源码编译安装(推荐,可自定义功能)或预编译包安装(快速部署)。
1. 源码编译安装(推荐)
通过源码编译可灵活选择功能模块,并确保使用最新特性。
步骤 1:安装依赖
# Ubuntu/Debian
sudo apt update && sudo apt install -y \
build-essential cmake git libssl-dev libx264-dev libfdk-aac-dev \
libavcodec-dev libavformat-dev libavutil-dev libswscale-dev \
libboost-all-dev zlib1g-dev
# CentOS/RHEL/Fedora
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y \
cmake git openssl-devel x264-devel fdk-aac-devel \
ffmpeg-devel boost-devel zlib-devel
步骤 2:克隆源码并编译
# 克隆 ZLMediaKit 源码(最新稳定版)
git clone https://github.com/ZLMediaKit/ZLMediaKit.git
cd ZLMediaKit
# 创建构建目录并编译(默认安装到 /usr/local)
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local \
-DENABLE_SSL=ON \ # 启用 HTTPS/RTMP over SSL
-DENABLE_HLS=ON \ # 启用 HLS 协议
-DENABLE_WEBRTC=ON # 启用 WebRTC(可选)
make -j$(nproc) # 编译(-j 参数根据 CPU 核心数优化速度)
sudo make install # 安装到系统目录
步骤 3:验证安装
# 检查 ZLMediaKit 可执行文件是否存在
which MediaServer # 应输出 /usr/local/bin/MediaServer
# 查看版本信息
MediaServer -v # 输出类似 ZLMediaKit 1.12.0
2. 预编译包安装(快速部署)
若不想编译,可从 ZLMediaKit 官方发布页 下载预编译包(如 .tar.gz
或 .deb
/.rpm
)。
Ubuntu/Debian(.deb 包)
# 下载最新版 .deb 包(替换为实际版本号)
wget https://github.com/ZLMediaKit/ZLMediaKit/releases/download/v1.12.0/ZLMediaKit_1.12.0_amd64.deb
# 安装
sudo dpkg -i ZLMediaKit_1.12.0_amd64.deb
sudo apt --fix-broken install # 解决依赖
CentOS/RHEL(.rpm 包)
# 下载最新版 .rpm 包(替换为实际版本号)
wget https://github.com/ZLMediaKit/ZLMediaKit/releases/download/v1.12.0/ZLMediaKit-1.12.0.x86_64.rpm
# 安装
sudo rpm -ivh ZLMediaKit-1.12.0.x86_64.rpm
四、配置 ZLMediaKit
ZLMediaKit 的核心配置文件是 MediaServer.conf
(默认路径 /usr/local/etc/MediaServer.conf
),需根据推流需求调整参数。
1. 配置 RTMP 推流(最常用)
RTMP 是直播推流的主流协议,需配置 RTMP 服务器的监听端口和应用名(用于区分直播间)。
修改配置文件
[rtmp]
enabled = true # 启用 RTMP 服务器
listen = 1935 # 监听端口(默认 1935)
max_connections = 1000 # 最大连接数
application = live # 应用名(推流地址格式:rtmp://ip:port/application/stream_key)
其他常用协议配置(可选)
[hls]
enabled = true
listen = 8080
path = ./hls # HLS 分片存储路径
max_segments = 60 # 最大分片数
[rtsp]
enabled = true
listen = 554
[web]
enabled = true
listen = 80
root = ./www # 静态网页根目录(用于播放页面)
2. 配置 HTTPS(可选)
若需通过 HTTPS 推流(如浏览器播放),需配置 SSL 证书:
[ssl]
enabled = true
cert_file = /path/to/fullchain.pem # 证书文件
key_file = /path/to/privkey.pem # 私钥文件
五、启动 ZLMediaKit 服务
配置完成后,启动 ZLMediaKit 服务并设置开机自启(以 systemd 为例)。
1. 手动启动
# 启动服务(前台运行,查看日志)
MediaServer -c /usr/local/etc/MediaServer.conf
# 后台运行(推荐)
MediaServer -c /usr/local/etc/MediaServer.conf -d
2. 设置开机自启(systemd)
# 创建 systemd 服务文件
sudo tee /etc/systemd/system/zlmediakit.service <<EOF
[Unit]
Description=ZLMediaKit Media Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/MediaServer -c /usr/local/etc/MediaServer.conf -d
Restart=always
User=root
[Install]
WantedBy=multi-user.target
EOF
# 重载 systemd 并启用服务
sudo systemctl daemon-reload
sudo systemctl enable zlmediakit
sudo systemctl start zlmediakit
六、测试视频推流
使用 FFmpeg 或其他工具推流到 ZLMediaKit 服务器,验证是否成功。
1. 使用 FFmpeg 推流(RTMP)
# 推送本地摄像头画面到 ZLMediaKit(RTMP)
ffmpeg -f v4l2 -i /dev/video0 \ # 摄像头设备(Linux 下为 /dev/video0)
-c:v libx264 -preset veryfast -crf 23 \
-c:a aac -b:a 128k \
-f flv rtmp://localhost:1935/live/my_stream
- 参数说明:
rtmp://localhost:1935/live/my_stream
:推流地址(live
是配置中的应用名,my_stream
是流密钥)。
2. 验证推流是否成功
-
方式 1:查看 ZLMediaKit 日志
日志路径通常为/var/log/zlmediakit.log
(或通过journalctl -u zlmediakit
查看 systemd 日志),搜索关键词connect
或publish
确认连接和推流事件。 -
方式 2:使用播放器验证
使用支持 RTMP 的播放器(如 VLC、FFplay)播放推流地址:ffplay rtmp://localhost:1935/live/my_stream
七、常见问题与解决
问题 1:ZLMediaKit 启动失败(端口被占用)
- 原因:配置的端口(如 1935)已被其他程序占用。
- 解决:
- 检查端口占用:
sudo lsof -i :1935
。 - 修改
MediaServer.conf
中的listen
端口(如改为 1936)。
- 检查端口占用:
问题 2:FFmpeg 推流提示“connection refused”
- 原因:ZLMediaKit 未启动或防火墙拦截了端口。
- 解决:
- 确认 ZLMediaKit 服务已启动(
systemctl status zlmediakit
)。 - 开放防火墙端口(以 ufw 为例):
sudo ufw allow 1935/tcp # RTMP 端口 sudo ufw allow 8080/tcp # HLS 端口(若启用)
- 确认 ZLMediaKit 服务已启动(
问题 3:推流画面卡顿或延迟高
- 原因:编码参数不合理(如码率过高、帧率过低)或网络带宽不足。
- 解决:
- 降低视频码率(如
-b:v 2000k
)。 - 提高帧率(如
-r 30
)。 - 检查网络带宽(确保上传带宽大于推流码率)。
- 降低视频码率(如
问题 4:HTTPS 推流失败(证书错误)
- 原因:证书路径错误或证书未正确配置。
- 解决:
- 确认
MediaServer.conf
中cert_file
和key_file
路径正确。 - 使用自签名证书时,播放器需信任证书(或忽略 SSL 错误)。
- 确认
八、扩展功能
ZLMediaKit 支持丰富的扩展功能,可根据需求集成:
1. 集成 WebRTC(实时互动)
通过 webrtc
模块实现低延迟实时互动直播,需在配置中启用 ENABLE_WEBRTC=ON
,并参考 官方文档 配置 STUN/TURN 服务器。
2. 转码与转封装
通过 pipeline
模块实现音视频转码(如 H.265 转 H.264)或转封装(如 RTMP 转 HLS),示例配置:
[pipeline]
enabled = true
input = rtmp://localhost:1935/live/my_stream
output_hls = hls://localhost:8080/live/my_stream.m3u8
output_rtsp = rtsp://localhost:554/live/my_stream
3. 录制与存储
通过 recorder
模块将推流内容录制为 MP4 或 TS 文件,示例配置:
[recorder]
enabled = true
input = rtmp://localhost:1935/live/my_stream
path = ./recordings # 录制文件存储路径
format = mp4 # 输出格式
总结
通过以上步骤,可在 Linux 环境下完成 ZLMediaKit 的安装与配置,实现视频推流功能。核心流程包括:
- 安装依赖并编译/安装 ZLMediaKit;
- 配置 RTMP 等协议参数;
- 启动服务并通过 FFmpeg 推流测试;
- 解决常见问题并扩展功能(如 WebRTC、转码)。
ZLMediaKit 凭借高性能和灵活性,适用于直播、视频会议、监控等场景,是企业级流媒体服务的理想选择。