zlmediakit组件详解(一)

该文章已生成可运行项目,

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_requeston_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 提供三种接入方式:

  1. HTTP API 接口控制(不修改源码)

  2. 嵌入式 SDK 接口(C/C++):如你当前使用的 mk_media_create

  3. 二次开发集成 ZLMediaKit:直接修改核心逻辑

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值