ZLMediaKit Windows 编译指南
1 ZLMediaKit Windows 一般编译指南
## 1. 环境准备
### 1.1 必需工具
 ```plaintext
 1. Visual Studio 2019 或更高版本
 2. CMake (3.15+)
 3. git
 4. vcpkg (包管理器)
 ```
### 1.2 安装步骤
```mermaid
 flowchart TB
     A[安装 Visual Studio] --> B[安装 CMake]
     B --> C[安装 Git]
     C --> D[安装 vcpkg]
     D --> E[配置环境变量]
 ```
#### Visual Studio 安装选项
 ```plaintext
 必选组件:
 - MSVC C++ 构建工具
 - Windows 10 SDK
 - CMake 工具
 - Git for Windows
 ```
#### vcpkg 安装
 ```powershell
 # 克隆 vcpkg
 git clone https://github.com/Microsoft/vcpkg.git
 cd vcpkg
# 运行安装脚本
 .\bootstrap-vcpkg.bat
# 集成到 Visual Studio
 .\vcpkg integrate install
 ```
## 2. 获取源码
### 2.1 克隆仓库
 ```powershell
 # 克隆主仓库
 git clone https://github.com/ZLMediaKit/ZLMediaKit.git
 cd ZLMediaKit
# 更新子模块
 git submodule update --init --recursive
 ```
### 2.2 目录结构
 ```plaintext
 ZLMediaKit/
 ├── 3rdpart/          # 第三方库
 ├── api/              # API 接口
 ├── cmake/            # CMake 配置文件
 ├── server/           # 服务器实现
 ├── src/              # 核心源码
 └── tests/            # 测试用例
 ```
## 3. 安装依赖
### 3.1 使用 vcpkg 安装依赖
 ```powershell
 # 安装必要的库
 vcpkg install openssl:x64-windows
 vcpkg install ffmpeg:x64-windows
 vcpkg install sdl2:x64-windows
 ```
### 3.2 依赖列表
 ```plaintext
 必需依赖:
 - OpenSSL
 - FFmpeg
 - SDL2 (可选,用于测试)
可选依赖:
 - faac
 - x264
 ```
## 4. 编译配置
### 4.1 CMake 配置
 ```powershell
 # 创建构建目录
 mkdir build
 cd build
# 配置 CMake (Release 模式)
 cmake .. -G "Visual Studio 16 2019" -A x64 -DCMAKE_TOOLCHAIN_FILE=[vcpkg root]/scripts/buildsystems/vcpkg.cmake -DENABLE_TESTS=ON -DENABLE_API=ON -DENABLE_SERVER=ON -DCMAKE_BUILD_TYPE=Release
 ```
### 4.2 CMake 选项说明
 ```cmake
 # 主要编译选项
 option(ENABLE_TESTS "编译测试用例" ON)
 option(ENABLE_API "编译 API" ON)
 option(ENABLE_SERVER "编译服务器" ON)
 option(ENABLE_RTPPROXY "启用 RTP 代理" OFF)
 ```
## 5. 编译步骤
### 5.1 使用命令行编译
 ```powershell
 # 在 build 目录下执行
 cmake --build . --config Release
# 或使用 MSBuild
 msbuild ZLMediaKit.sln /p:Configuration=Release
 ```
### 5.2 使用 Visual Studio 编译
 ```mermaid
 flowchart LR
     A[打开解决方案] --> B[选择 Release 配置]
     B --> C[生成解决方案]
     C --> D[检查输出目录]
 ```
## 6. 常见问题解决
### 6.1 编译错误
 ```plaintext
 1. 找不到依赖库
 解决:检查 vcpkg 安装路径和 CMAKE_TOOLCHAIN_FILE 设置
2. 链接错误
 解决:确保所有依赖库都是相同架构(x86/x64)
3. 路径问题
 解决:使用绝对路径,避免空格和中文
 ```
### 6.2 运行问题
 ```powershell
 # 检查 DLL 依赖
 dumpbin /dependents MediaServer.exe
# 确保依赖 DLL 在路径中
 echo %PATH%
 ```
## 7. 测试验证
### 7.1 运行测试用例
 ```powershell
 # 进入测试程序目录
 cd build/tests/Release
# 运行测试
 .\test_server.exe
 ```
### 7.2 服务器测试
 ```powershell
 # 运行服务器
 cd build/release/MediaServer
 .\MediaServer.exe
 ```
## 8. 发布准备
### 8.1 文件清单
 ```plaintext
 发布必需文件:
 ├── MediaServer.exe
 ├── config.ini
 ├── www/
 └── DLL文件/
     ├── libssl-1_1-x64.dll
     ├── libcrypto-1_1-x64.dll
     └── [其他依赖DLL]
 ```
### 8.2 配置文件
 ```ini
 [zlmediakit]
 max_streams=50
 stream_timeout=15
 retry_count=3
 ```
## 9. 性能优化
### 9.1 编译优化
 ```cmake
 # CMake 优化选项
 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /O2")
 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi")
 set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /GL")
 ```
### 9.2 运行优化
 ```plaintext
 1. 使用 Release 版本
 2. 开启硬件加速
 3. 调整缓冲区大小
 4. 优化网络参数
 ```
2 . ZLMediaKit WebRTC 支持编译指南
## 1. WebRTC 支持说明
```mermaid
 flowchart TB
     subgraph "ZLMediaKit WebRTC"
         A["RTMP/RTSP/HLS"] --> B["Media Server"]
         C["WebRTC"] -.-> B
         B --> D["Browser"]
         
         style C stroke-dasharray: 5 5
     end
 ```
### 1.1 默认编译
 ```plaintext
 ❌ 默认编译配置不包含 WebRTC 支持
 ❌ 标准编译命令无法启用 WebRTC 功能
 ```
### 1.2 WebRTC 依赖
 ```plaintext
 额外依赖:
 - libsrtp
 - openssl
 - usrsctp
 - json
 ```
## 2. 启用 WebRTC 的编译步骤
### 2.1 安装额外依赖加上上面的
vcpkg install openssl:x64-windows
 vcpkg install ffmpeg:x64-windows
 vcpkg install sdl2:x64-windows
 ```powershell
 # 使用 vcpkg 安装必要的库
 vcpkg install libsrtp:x64-windows
 vcpkg install usrsctp:x64-windows
 vcpkg install nlohmann-json:x64-windows
 ```
### 2.2 修改 CMake 命令
 ```powershell
 cmake .. -G "Visual Studio 16 2019" -A x64 -DCMAKE_TOOLCHAIN_FILE=[vcpkg root]/scripts/buildsystems/vcpkg.cmake -DENABLE_TESTS=ON -DENABLE_API=ON -DENABLE_SERVER=ON -DENABLE_WEBRTC=ON -DCMAKE_BUILD_TYPE=Release
 ```
关键参数:
 ```plaintext
 -DENABLE_WEBRTC=ON    # 启用 WebRTC 支持
 ```
## 3. 编译注意事项
### 3.1 依赖版本要求
 ```plaintext
 最低版本要求:
 - libsrtp >= 2.2.0
 - openssl >= 1.1.1
 - usrsctp >= 0.9.3
 - nlohmann-json >= 3.9.0
 ```
### 3.2 常见编译错误
 ```plaintext
 1. 找不到 srtp.h
 解决:检查 libsrtp 安装路径
2. 找不到 usrsctp.h
 解决:确认 usrsctp 安装正确
3. SSL 相关错误
 解决:确保 OpenSSL 版本正确
 ```
## 4. 配置 WebRTC
### 4.1 配置文件设置
 ```ini
 [webrtc]
 # WebRTC 服务器配置
 enabled=1
 # 端口配置
 port=8000
 # STUN 服务器
 stun_server=stun:stun.l.google.com:19302
 # 启用 DTLS
 enable_dtls=1
 ```
### 4.2 证书配置
 ```bash
 # 生成证书
 openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes
# 配置文件中指定证书路径
 [webrtc]
 cert_file=cert.pem
 key_file=key.pem
 ```
## 5. 验证 WebRTC 功能
### 5.1 测试页面
 ```html
 <!DOCTYPE html>
 <html>
 <head>
     <title>WebRTC Test</title>
 </head>
 <body>
     <video id="video" autoplay playsinline></video>
     <script>
         // WebRTC 连接代码
         const pc = new RTCPeerConnection();
         // ... 连接逻辑
     </script>
 </body>
 </html>
编译遇到问题解决
usrsctp.lib(user_socket.c.obj) : error LNK2019: 无法解析的外部符号 __imp__ftime64,函数 ftime 中引用了该符号
vcpkg install usrsctp:x64-windows-static
安装静态库
// 在 Visual Studio 项目中:  
 1. 右键项目 → 属性 → C/C++ → 代码生成  
 2. 检查 "运行时库" 设置:  
    - 若使用 usrsctp 的静态库,选择 /MT 或 /MTd  
    - 若使用 DLL 版,选择 /MD 或 /MDd  
 3. 确保所有依赖库使用相同的运行时库配置
