82 lines
3.6 KiB
Markdown
82 lines
3.6 KiB
Markdown
# ZLMediaKit 架构文档
|
||
|
||
## 1. 项目概述
|
||
ZLMediaKit 是一个高性能流媒体服务器框架,支持 RTMP/RTSP/WebRTC/SRT 等多种协议,采用 C++11 编写,具有跨平台、高并发、低延迟等特点。
|
||
|
||
## 2. 核心模块架构
|
||
|
||
### 2.1 基础设施层
|
||
- **`3rdpart/ZLToolKit`**
|
||
- 网络库基础:提供 [Socket](3rdpart/ZLToolKit/src/network/Socket.h)、[EventPoller](3rdpart/ZLToolKit/src/poller/EventPoller.h) 等核心组件
|
||
- 内存管理:[ObjectPool](3rdpart/ZLToolKit/src/util/ObjectPool.h) 对象池实现
|
||
|
||
- **`src/Common`**
|
||
- 配置系统:[config.cpp](src/Common/config.cpp) 实现 `MediaServer` 配置项管理
|
||
- 工具集:[Util.cpp](src/Common/Util.cpp) 提供时间处理、Base64 编码等通用功能
|
||
- 日志系统:[Logger.cpp](src/Common/Logger.cpp) 实现多级日志输出
|
||
|
||
### 2.2 协议处理层
|
||
|
||
#### RTMP 协议栈
|
||
- **`src/Rtmp`**
|
||
- 协议解析:[RtmpProtocol.cpp](src/Rtmp/RtmpProtocol.cpp) 实现 AMF0 解析
|
||
- 会话管理:[RtmpSession.cpp](src/Rtmp/RtmpSession.cpp) 处理推流/拉流会话
|
||
- 转发服务:[RtmpMuxer.cpp](src/Rtmp/RtmpMuxer.cpp) 实现流媒体转发
|
||
|
||
#### RTSP 协议栈
|
||
- **`src/Rtsp`**
|
||
- 信令处理:[RtspSession.cpp](src/Rtsp/RtspSession.cpp) 实现 SETUP/PLAY/TEARDOWN 等方法
|
||
- 传输层:[RtpProcess.cpp](src/Rtsp/RtpProcess.cpp) 处理 RTP/RTCP 传输
|
||
|
||
#### WebRTC 协议栈
|
||
- **`webrtc` 目录**
|
||
- 信令交互:[WebRtcSignalingSession.cpp](webrtc/WebRtcSignalingSession.cpp)
|
||
- 媒体传输:[DtlsTransport.cpp](webrtc/DtlsTransport.cpp) 和 [SrtpSession.cpp](webrtc/SrtpSession.cpp)
|
||
- ICE 处理:[IceTransport.cpp](webrtc/IceTransport.cpp)
|
||
|
||
#### SRT 协议支持
|
||
- **`srt` 目录**
|
||
- 核心传输:[SrtTransport.cpp](srt/SrtTransport.cpp)
|
||
- 会话管理:[SrtSession.cpp](srt/SrtSession.cpp)
|
||
- 重传机制:[NackContext.cpp](srt/NackContext.cpp)
|
||
|
||
### 2.3 媒体处理层
|
||
|
||
#### 编解码模块
|
||
- **`ext-codec` 目录**
|
||
- 视频编解码:[H264.cpp](ext-codec/H264.cpp) 和 [H265.cpp](ext-codec/H265.cpp)
|
||
- 音频编解码:[AAC.cpp](ext-codec/AAC.cpp) 和 [G711.cpp](ext-codec/G711.cpp)
|
||
- 封装处理:[H264Rtmp.cpp](ext-codec/H264Rtmp.cpp) 实现 RTMP 封装
|
||
|
||
- **`src/Codec` 目录**
|
||
- 软件编解码:[SoftDecoder.cpp](src/Codec/SoftDecoder.cpp)
|
||
- 硬件加速:[Hardware.cpp](src/Codec/Hardware.cpp)
|
||
|
||
#### 流媒体处理
|
||
- **`src/Player`**
|
||
- 播放器核心:[PlayerBase.cpp](src/Player/PlayerBase.cpp)
|
||
- 协议适配:[RtspPlayer.cpp](src/Player/RtspPlayer.cpp)
|
||
|
||
- **`src/Pusher`**
|
||
- 推流器实现:[RtmpPusher.cpp](src/Pusher/RtmpPusher.cpp)
|
||
- 协议转换:[FlvMuxer.cpp](src/Pusher/FlvMuxer.cpp)
|
||
|
||
### 2.4 服务管理层
|
||
|
||
- **`server` 目录**
|
||
- 主服务入口:[main.cpp](server/main.cpp)
|
||
- Web API:[WebApi.cpp](server/WebApi.cpp) 实现 RESTful 接口
|
||
- 事件回调:[WebHook.cpp](server/WebHook.cpp) 处理业务事件
|
||
|
||
- **`api` 目录**
|
||
- 接口定义:[include/api-api.h](api/include/api-api.h)
|
||
- 测试用例:[tests/test_httpApi.cpp](api/tests/test_httpApi.cpp)
|
||
|
||
## 3. 扩展能力
|
||
- **`player` 目录**:SDL 音频输出 ([SDLAudioDevice.cpp](player/SDLAudioDevice.cpp)) 和 YUV 渲染
|
||
- **`FFmpegSource.cpp`**:基于 FFmpeg 的媒体源处理
|
||
- **`docker` 支持**:通过 [build_docker_images.sh](docker/build_docker_images.sh) 构建容器镜像
|
||
|
||
## 4. 测试体系
|
||
- **`tests` 目录**:协议测试 ([test_rtmp.cpp](tests/test_rtmp.cpp)) 和性能测试 ([test_bench.cpp](tests/test_bench.cpp))
|
||
- **`postman` 集合**:[ZLMediaKit.postman_collection.json](postman/ZLMediaKit.postman_collection.json) 提供 API 测试用例 |