ZLMediaKit 是一个高性能的流媒体服务器框架,支持 RTSP / RTMP / HLS / WebRTC / HTTP-FLV / SRT / GB28181 等多种协议。它由 C++ 编写,具备高并发、低延迟、跨平台等特点。下面我将从架构原理、核心模块、数据流流程几个维度为你详解 ZLMediaKit 的整体设计与工作机制
一、ZLMediaKit 架构总览
ZLMediaKit 采用 模块化 + 多协议统一管理的架构,其核心逻辑可以简化为三层:

二、核心组件详解
1. Socket/网络通信层(Network)
封装 TCP/UDP 收发逻辑,实现了异步 IO + 非阻塞处理:
-
核心类:
Socket,TcpServer,EventPoller,Buffer -
多线程模型通过
EventPollerPool实现并发处理
2. 协议层(Protocol)
每种协议由独立模块解析/生成,对媒体源进行读取/输出:
-
RtspSession/RtmpSession/HttpSession/WebRtcTransport -
统一使用
MediaSource查找/创建媒体流
3. 媒体核心层(MediaSource + RingBuffer)
这是 ZLMediaKit 的心脏部分,负责媒体流的创建、发布、读写与分发。
-
MediaSource:管理 live/test 流媒体(多协议共享) -
RingBuffer:媒体帧缓冲区(用于延迟处理和多读者复制)
4. API/业务控制层(API)
ZLMediaKit 内部通过 http api、event api、hook api 实现对外控制:
-
/index/api/xxx:HTTP 接口调用(如获取流列表、启动推流) -
mk_env_init()+config.ini控制默认行为 -
可注册回调处理事件(如
on_mk_http_request、on_mk_media_publish)
三、数据流处理流程(推流 -> 分发)
以 RTSP 推流为例,ZLMediaKit 的内部流程如下:

多个协议(RTMP、HLS、WebRTC)共享同一个 MediaSource,并从同一个 RingBuffer 分发数据。
四、配置控制(config.ini)
-
general.streamNoneReaderDelayMS=15000:无人观看时延迟注销流 -
http.port=80,rtsp.port=554,rtmp.port=1935:控制监听端口 -
rtc.port=8000:WebRTC端口 -
可通过代码覆盖,如:
-
mk_set_option("http.port", "8080");
五、使用方式
ZLMediaKit 提供三种接入方式:
-
HTTP API 接口控制(不修改源码)
-
嵌入式 SDK 接口(C/C++):如你当前使用的
mk_media_create等 -
二次开发集成 ZLMediaKit:直接修改核心逻辑
1万+

被折叠的 条评论
为什么被折叠?



