ZLMediaKit/doc/ARCHITECTURE.md

82 lines
3.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 测试用例