基于libcurl的HTTP双向流通信演示项目,模拟类似Amazon Kinesis Video Streams的流媒体传输场景。
- 双向流通信: 支持同时发送数据流和接收服务器响应
- 分块传输: 使用HTTP chunked transfer encoding
- 多线程: 数据生成和传输分离,支持实时流处理
- 自动构建: 从源码自动下载和编译curl库
- 静态链接: 生成独立的可执行文件,便于部署
- CMake 3.16+
- GCC/Clang编译器
- OpenSSL开发库
- zlib开发库
- pthread库
sudo apt-get update
sudo apt-get install build-essential cmake libssl-dev zlib1g-dev pkg-configsudo yum install gcc gcc-c++ make cmake openssl-devel zlib-devel pkgconfig# 自动安装依赖并构建
./build.sh -i
# 仅构建(依赖已安装)
./build.sh
# Debug模式构建
./build.sh -d
# 清理后重新构建
./build.sh -c
# 查看帮助
./build.sh -h# 创建构建目录
mkdir build && cd build
# 配置项目(自动下载编译curl)
cmake ..
# 编译项目
make -j$(nproc)项目包含一个Python Flask测试服务器,用于模拟AWS Kinesis Video Streams的putMedia端点。
- 双向流通信: 同时接收客户端数据流和发送Fragment ACK响应
- 分块传输支持: 支持HTTP chunked transfer encoding
- 模拟AWS KVS: 模拟Amazon Kinesis Video Streams的putMedia API行为
- 实时ACK响应: 生成BUFFERING、RECEIVED、PERSISTED等类型的确认消息
- 多线程处理: 异步处理接收数据和发送响应
- 健康检查: 提供健康检查端点用于监控
# 安装Flask
pip3 install flask
# 或使用系统包管理器(Ubuntu/Debian)
sudo apt-get install python3-flask# 进入server目录
cd server
# 启动Flask服务器
python3 http_chunk_s.py
# 或者直接从项目根目录运行
python3 server/http_chunk_s.py服务器将在 http://localhost:8080 启动,支持以下端点:
POST /putMedia- 主要的流传输端点(模拟AWS KVS)GET /health- 健康检查端点GET /- 使用说明页面
=== libcurl双向流通信测试服务器 ===
启动Flask服务器...
访问 http://localhost:8080 查看使用说明
按Ctrl+C停止服务器
[SERVER] 收到putMedia请求
[SERVER] Content-Type: application/octet-stream
[SERVER] Transfer-Encoding: chunked
[SERVER] 接收到数据块: 1024 字节 (总计: 1024)
[SERVER] 处理接收到的数据: 1024 字节
# 终端1:启动服务器
cd server
python3 http_chunk_s.py# 终端2:运行客户端
./build/bin/curl_http_chunk http://localhost:8080/putMedia
# 或使用默认URL(指向本地测试服务器)
./build/bin/curl_http_chunk- 客户端会发送模拟的视频帧数据
- 服务器会实时接收数据并返回Fragment ACK
- 两端都会显示详细的传输日志
curl_demo/
├── CMakeLists.txt # 根CMake配置
├── build.sh # 自动构建脚本
├── client/
│ ├── CMakeLists.txt # 客户端CMake配置
│ └── curl_http_chunk.c # 主程序源码
├── cmake/
│ └── build_curl.cmake.in # curl构建脚本模板
├── server/
│ └── http_chunk_s.py # 测试服务器(Python Flask)
└── README.md # 项目说明
- 数据生成线程: 模拟持续产生的视频帧数据
- 流传输: 使用HTTP POST和chunked编码发送数据
- 响应处理: 接收和处理服务器的ACK消息
- 进度监控: 实时显示传输进度
- 流数据接收: 实时接收客户端发送的分块数据
- ACK响应生成: 模拟AWS KVS的Fragment确认机制
- 并发处理: 支持多线程异步处理数据和响应
- 协议模拟: 完整模拟Kinesis Video Streams的putMedia API
- 支持长连接和持续传输
- 双向流式通信(同时发送和接收)
- 自动重连和错误处理
- 内存管理和缓冲区优化
- 线程安全的数据结构
- HTTP/1.1 chunked transfer encoding
- 实时Fragment ACK响应机制
- Release模式: 优化性能,适合生产环境
- Debug模式: 包含调试信息,适合开发调试
项目自动编译的curl库包含以下特性:
- 仅支持HTTP/HTTPS协议
- 静态链接OpenSSL
- 启用分块传输编码
- 禁用不需要的协议以减小体积
本项目仅用于学习和演示目的。
欢迎提交Issue和Pull Request来改进项目。