ZLMediaKit 的安装及使用介绍

一、概述

ZLMediaKit是一个基于C++11开发的高性能开源流媒体服务器,提供了强大的音视频处理能力。它支持多种流媒体协议,具有低延迟和高并发处理能力,适用于构建实时音视频传输和处理的应用,如直播、视频会议、视频监控等场景。

二、核心特性

2.1 技术特点

  1. 高性能架构

    • 基于C++11开发,避免使用裸指针,代码稳定可靠
    • 采用多路复用/多线程异步网络IO模式
    • 支持海量客户端连接,并发性能优越
  2. 协议支持

    • 支持RTSP、RTMP、HLS、HTTP-FLV、Websocket-FLV、GB28181、MP4
    • 支持协议间相互转换
    • 打通视频监控协议栈与直播协议栈
  3. 编码支持

    • 全面支持H265/H264/AAC/G711/OPUS
    • 支持动态转码
  4. 平台兼容

    • 支持Linux、macOS、iOS、Android、Windows全平台
    • 提供标准C API,可作为SDK供其他语言调用

2.2 性能优势

  • 低延迟:500毫秒内,最低可达100毫秒
  • 秒开体验:支持画面秒开
  • 高稳定性:代码经过长期大量稳定性、性能测试,已在线上商用验证

三、Linux环境安装

3.1 环境准备

1
2
3
4
5
6
# 安装编译工具
sudo apt-get install build-essential
sudo apt-get install cmake

# 安装依赖库(openssl必需)
sudo apt-get install libssl-dev -y

3.2 源码获取与编译

1
2
3
4
5
6
7
8
9
10
11
12
# 国内用户推荐从gitee下载
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit

# 初始化子模块(重要步骤)
git submodule update --init

# 构建项目
mkdir build
cd build
cmake ..
make -j4

3.3 运行服务

1
2
3
4
5
6
7
cd ZLMediaKit/release/linux/Debug

# 查看启动参数
./MediaServer -h

# 以守护进程模式启动
./MediaServer -d &

四、HTTP API使用

4.1 API概览

ZLMediaKit提供完善的RESTful API和WebHook,支持丰富的业务逻辑控制。

访问API列表

1
http://127.0.0.1/index/api/getApiList

常用API接口

  • /index/api/getServerConfig - 获取服务器配置
  • /index/api/getMediaList - 获取流列表

4.2 功能实现

通过HTTP API可以实现以下功能:

  1. 流媒体控制:启动和停止播放、推流
  2. 状态监控:获取连接数、运行状态、带宽使用情况
  3. 统计信息:获取码率、帧率、丢包率等统计数据
  4. 参数配置:设置网络端口、转码参数、录制参数
  5. 录制管理:控制录制和截图功能
  6. 日志查看:实时监控服务器运行状态

五、推流操作

5.1 FFmpeg推流示例

UDP推流

1
ffmpeg -re -i input.mp4 -c copy -f rtsp rtsp://127.0.0.1:8554/stream

TCP推流

1
ffmpeg -re -i input.mp4 -c copy -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:8554/stream

循环推流

1
ffmpeg -re -stream_loop -1 -i input.mp4 -c copy -f rtsp rtsp://127.0.0.1:8554/stream

参数说明

  • -re:以流的方式读取
  • -stream_loop -1:无限循环读取视频源
  • -rtsp_transport tcp:使用TCP传输协议

5.2 实际应用示例

1
2
# TCP方式推流到远程服务器
ffmpeg -re -i input.mp4 -vcodec h264 -acodec aac -f rtsp -rtsp_transport tcp rtsp://114.115.170.245/live/test

六、点播功能实现

6.1 配置点播服务

ZLMediaKit的点播功能主要通过MP4文件实现:

  1. 文件放置:将MP4文件放置在www/record目录下
  2. 路径配置:可在config.ini中修改默认路径
  3. 访问方式:支持HTTP、RTSP、RTMP、HTTP-FLV、Websocket-FLV协议

6.2 点播访问示例

RTSP点播

1
rtsp://服务器IP:端口/record/文件名.mp4

HTTP点播

1
http://服务器IP:端口/文件相对路径

6.3 点播文件处理

1
2
# 拉取点播文件并保存到本地
ffmpeg -i rtsp://114.115.170.245/record/input.mp4 -c copy output.mp4

七、拉流与播放

7.1 使用FFplay播放

1
2
# 播放RTSP流
ffplay rtsp://127.0.0.1:8554/stream

7.2 使用VLC播放

安装VLC播放器后,通过”媒体”→”打开网络串流”输入流地址即可播放。

7.3 流录制保存

1
2
# 拉流保存为MP4文件(设置30秒超时)
ffmpeg -stimeout 30000000 -i rtsp://127.0.0.1:8554/stream -c copy output.mp4

注意-stimeout参数必须放在RTSP地址之前,单位为微秒。

八、音频设备操作

8.1 查看音频设备

1
2
3
4
5
6
7
8
# 查看音频设备列表
aplay -l

# 查看已检测的音频设备
cat /proc/asound/cards

# 查看音频输出设备
pactl list short sinks

设备标识说明

  • hw:0:第一个音频设备
  • hw:1:第二个音频设备
  • default:默认音频设备

8.2 音频录制与播放

录音操作

1
2
3
4
5
# 基本录音
ffmpeg -f alsa -i hw:0 out.wav

# 录音并转码为MP3
ffmpeg -f alsa -i default -c:a libmp3lame output.mp3

播放操作

1
2
3
4
5
# 使用aplay播放
aplay out.wav

# 使用FFmpeg播放
ffmpeg -i nf.mp3 -f alsa hw:0

8.3 设备配置脚本

麦克风输入配置mic_in_config.sh):

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh
# 设置捕获音量
amixer cset name='Capture Volume' 63,63

# PCM设置
amixer sset 'PCM Playback' on
amixer sset 'Playback' 256

# 耳机设置
amixer sset 'Headphone Playback ZC' on
amixer sset Headphone 125,125

线路输入配置line_in_config.sh):

1
2
3
4
5
6
7
8
9
10
11
#!/bin/sh
# 设置捕获音量
amixer cset name='Capture Volume' 63,63

# PCM设置
amixer sset 'PCM Playback' on
amixer sset 'Playback' 256

# 耳机设置
amixer sset 'Headphone Playback ZC' on
amixer sset Headphone 125,125

九、服务推拉流实例

9.1 音频推流

1
2
# 向服务器推送音频流
ffmpeg -re -i nf.mp3 -acodec aac -f rtsp -rtsp_transport tcp rtsp://114.115.170.245/live/test

9.2 音频拉流播放

1
2
# 从服务器拉取音频流并播放
ffmpeg -i rtsp://114.115.170.245/live/test -f alsa hw:0

十、系统管理

10.1 查看端口占用

1
2
3
4
5
# 查看指定端口占用情况
lsof -i:8000

# 使用netstat查看
netstat -tunlp | grep 8000

netstat参数说明

  • -t:显示TCP相关选项
  • -u:显示UDP相关选项
  • -n:显示数字地址
  • -l:仅显示监听状态
  • -p:显示进程名

10.2 进程管理

1
2
3
4
5
# 查找占用端口的进程
lsof -i:端口号

# 结束指定进程
kill -9 进程ID

十一、总结

ZLMediaKit作为一个功能强大的开源流媒体服务器,具有以下优势:

  1. 协议全面:支持主流流媒体协议及协议转换
  2. 性能优越:低延迟、高并发、跨平台
  3. 易于集成:提供完善的API和SDK接口
  4. 稳定可靠:经过大量线上环境验证

通过本文介绍的安装配置、推拉流操作、点播功能实现等内容,用户可以快速上手使用ZLMediaKit构建自己的流媒体服务系统。


注意事项

  1. 编译时务必执行git submodule update --init
  2. 生产环境建议配置防火墙和安全策略
  3. 定期更新版本以获取安全修复和性能优化

参考资源