ZLMediaKit Windows 编译指南

devtools/2025/2/24 3:32:09/

 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. 确保所有依赖库使用相同的运行时库配置


http://www.ppmy.cn/devtools/161281.html

相关文章

OSPF基础知识总结

基本概念 协议类型:链路状态型IGP(内部网关协议),基于Dijkstra算法计算最短路径树。 协议号:IP层协议,协议号89。 特点:支持分层设计(区域划分)、快速收敛、无环路、支持VLSM/CIDR。 区域(Area) 骨干区域(Backbone Area):Area 0,所有非骨干区域必须直接或通过虚…

【Python】pypinyin-汉字拼音转换工具

文章目录 1. 主要功能2. 安装3. 常用API3.1 拼音风格3.2 核心API3.2.1 pypinyin.pinyin()3.2.2 pypinyin.lazy_pinyin()3.2.3 pypinyin.load_single_dict()3.2.4 pypinyin.load_phrases_dict()3.2.5 pypinyin.slug() 3.3 注册新的拼音风格 4. 基本用法4.1 库导入4.2 基本汉字转…

深入浅出Java虚拟机(JVM)核心原理

目录 一、JVM概述 1.1 大白话理解JVM 1.2 JVM架构 1.3 跨平台运行的本质 二、类加载器 1.1 类加载全过程 1.1.1 加载阶段 1.1.2 验证阶段 1.1.3 准备阶段 2.2 双亲委派机制 2.3 自定义类加载器 三、运行时数据区 3.1 堆内存结构 3.1.1 新生代参数优化 3.1.2 内存…

手机控制电脑远程关机

远程看看软件兼容iOS和Android设备&#xff0c;该软件除了能通过电脑远程关闭另一台电脑外&#xff0c;您还可以通过它在手机上远程关闭公司的电脑。您可以按照以下步骤进行操作以实现电脑远程关机&#xff1a; 步骤1.在手机应用商店搜索“远程看看”进行软件安装&#xff0c;…

1.24作业

1 pdf_converter ThinkPHP 5.x远程命令执行漏洞分析与复现 - 渗透测试中心 - 博客园 sindex/think%5Capp/invokefunction&functioncall_user_func_array&vars%5B0%5Dsystem&vars%5B1%5D%5B%5Dcat%2Fflag 2 三原色值0-255&#xff08;八位二进制&#xff09;&am…

Asp.Net 前后端分离项目——项目搭建

项目目录 MyDemoProject/ ├── BackendDemo/ # 后端项目目录 │ ├── Controllers/ # 控制器目录&#xff0c;存放 API 控制器 │ │ └── WeatherForecastController.cs │ ├── Models/ # 数据模型目录&#xff08;…

跨中心模型自适应牙齿分割|文献速递-医学影像人工智能进展

Title 题目 Cross-center Model Adaptive Tooth segmentation 跨中心模型自适应牙齿分割 01 文献速递介绍 三维&#xff08;3D&#xff09;口腔内扫描牙齿模型的自动、准确分割是计算机辅助正畸治疗不可或缺的先决条件。具体而言&#xff0c;口腔内扫描&#xff08;IOS&am…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_full_name 函数

ngx_conf_full_name 声明在 src/core/ngx_conf_file.h ngx_int_t ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name,ngx_uint_t conf_prefix); 定义在 src\core\ngx_conf_file.c ngx_int_t ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name, ngx_uint_t conf_…