ZLMediaKit 项目概览

15 阅读4分钟

ZLMediaKit 项目概览

我来帮你分析这个项目的主要功能模块和入手建议。

让我先查看一下项目的整体结构: 根据你提供的 main.cpp 文件和项目文档,我来为你详细讲解 ZLMediaKit 项目:


📚 ZLMediaKit 项目概览

ZLMediaKit 是一个基于 C++11 的高性能流媒体服务框架,支持多种流媒体协议的推拉流、时制、转码等功能。它既可以作为独立的流媒体服务器使用,也可以作为 SDK 集成到你的项目中。


🎯 核心功能模块

main.cpp 文件可以看到项目的主要模块:

1. 协议服务器模块

项目支持多种流媒体协议,每个协议都有独立的服务器实例:

协议默认端口功能代码位置
RTSP554 / 332(SSL)实时流传输协议RtspSession
RTMP1935 / 19350(SSL)Adobe 流媒体协议RtmpSession
HTTP/HTTPS80 / 443HTTP-FLV、HLS、文件服务HttpSession
WebRTC可配置实时音视频通信WebRtcSession
GB2818110000国标视频监控协议RtpServer
SRT可配置低延时传输协议SrtSession
Shell9000Telnet 调试服务器ShellSession

2. Web API 和 Hook 模块

installWebApi();     // HTTP API 接口:用于服务控制
installWebHook();    // HTTP Hook 接口:事件回调通知
  • Web API:提供 RESTful 接口管理流媒体服务(如开始推流、停止播放等)
  • Web Hook:当有推流、播放等事件时,服务器会回调你的业务服务器

3. 日志系统

Logger::Instance().add(std::make_shared<ConsoleChannel>(...));
Logger::Instance().add(std::make_shared<FileChannel>(...));
  • 支持控制台和文件日志
  • 支持日志分片、自动清理

4. 配置管理

loadIniConfig(g_ini_file.data());  // 加载配置文件
  • 配置文件路径:config.ini
  • 支持热加载(无需重启服务器)

5. SSL/TLS 支持

g_reload_certificates();  // 加载 SSL 证书
  • 支持 HTTPS、RTMPS、RTSPS 等加密协议

🚀 学习路径建议

第一步:理解项目结构

查看项目的目录结构:

ZLMediaKit/
├── server/          # 服务器主程序(你正在看的 main.cpp)
├── src/             # 核心源码(协议实现)
├── api/             # C API SDK
├── webrtc/          # WebRTC 实现
├── srt/             # SRT 协议实现
├── tests/           # 测试程序
└── www/             # Web 管理界面

第二步:编译和运行

  1. 编译项目
mkdir build && cd build
   cmake ..
   cmake --build .
  1. 运行服务器
./MediaServer -c config.ini
  1. 测试推流(使用 FFmpeg):
ffmpeg -re -i test.mp4 -c copy -f rtsp rtsp://127.0.0.1/live/test
  1. 测试播放: 在浏览器打开:http://127.0.0.1/live/test.flv

第三步:熟悉核心接口

1. Web API(RESTful 接口)

查看文档:MediaServer支持的HTTP-API

示例:获取流列表

curl http://127.0.0.1/index/api/getMediaList
2. Web Hook(事件回调)

查看文档:MediaServer支持的HTTP-HOOK-API

当有人推流时,服务器会回调你的业务服务器:

{
  "mediaServerId": "your_server_id",
  "app": "live",
  "stream": "test",
  "schema": "rtsp"
}

第四步:阅读核心代码

推荐阅读顺序
  1. server/main.cpp:理解服务器启动流程
  2. src/Rtsp/RtspSession.cpp:理解 RTSP 协议处理
  3. src/Http/HttpSession.cpp:理解 HTTP 请求处理
  4. server/WebApi.cpp:理解 API 接口实现
  5. tests/ 目录:查看各种测试示例

第五步:二次开发

场景 1:作为独立服务器使用
  • 不需要写代码,直接运行 MediaServer
  • 通过 Web API 和 Hook 集成到你的业务系统
场景 2:作为 SDK 集成

查看 api/ 目录的 C API 文档:

#include "mk_mediakit.h"

// 初始化
mk_config config = mk_config_create();
mk_env_init(config);

// 推流
mk_pusher pusher = mk_pusher_create(...);
场景 3:C++ 二次开发

参考 tests/ 目录的示例,例如:

// 创建 RTSP 推流器
auto pusher = std::make_shared<RtspPusher>(...);
pusher->publish(url);

📖 重要资源

资源链接
项目 Wikigithub.com/ZLMediaKit/…
快速开始github.com/ZLMediaKit/…
HTTP API 文档github.com/ZLMediaKit/…
Hook 文档github.com/ZLMediaKit/…
配置文件说明github.com/ZLMediaKit/…

🛠️ 实战建议

  1. 先跑通服务器:编译并运行 MediaServer,用 FFmpeg 测试推拉流
  2. 查看日志:理解服务器的运行流程
  3. 调用 API:用 Postman 测试 Web API
  4. 修改代码:在 server/main.cpp 添加自定义逻辑
  5. 阅读源码:从简单的模块(如 HTTP)开始看起

常见问题

Q: 我只想做流媒体转发,需要修改代码吗?
A: 不需要,直接运行 MediaServer 即可。

Q: 如何实现推流鉴权?
A: 实现 on_publish Hook,在你的业务服务器判断是否允许推流。

Q: 如何录制视频?
A: 调用 startRecord API 或配置自动录制。


如果你有具体的开发需求或遇到问题,随时告诉我!🎉