Skip to content

A demonstration project based on libcurl for HTTP bidirectional streaming communication, simulating a streaming transmission scenario similar to Amazon Kinesis Video Streams

Notifications You must be signed in to change notification settings

PixelPacket/curl_kvs_sim

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

curl_demo

基于libcurl的HTTP双向流通信演示项目,模拟类似Amazon Kinesis Video Streams的流媒体传输场景。

项目特点

  • 双向流通信: 支持同时发送数据流和接收服务器响应
  • 分块传输: 使用HTTP chunked transfer encoding
  • 多线程: 数据生成和传输分离,支持实时流处理
  • 自动构建: 从源码自动下载和编译curl库
  • 静态链接: 生成独立的可执行文件,便于部署

构建要求

系统依赖

  • CMake 3.16+
  • GCC/Clang编译器
  • OpenSSL开发库
  • zlib开发库
  • pthread库

Ubuntu/Debian安装依赖

sudo apt-get update
sudo apt-get install build-essential cmake libssl-dev zlib1g-dev pkg-config

CentOS/RHEL安装依赖

sudo yum install gcc gcc-c++ make cmake openssl-devel zlib-devel pkgconfig

构建方法

方法1: 使用构建脚本(推荐)

# 自动安装依赖并构建
./build.sh -i

# 仅构建(依赖已安装)
./build.sh

# Debug模式构建
./build.sh -d

# 清理后重新构建
./build.sh -c

# 查看帮助
./build.sh -h

方法2: 手动构建

# 创建构建目录
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等类型的确认消息
  • 多线程处理: 异步处理接收数据和发送响应
  • 健康检查: 提供健康检查端点用于监控

启动测试服务器

安装Python依赖

# 安装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. 启动测试服务器

# 终端1:启动服务器
cd server
python3 http_chunk_s.py

2. 运行客户端程序

# 终端2:运行客户端
./build/bin/curl_http_chunk http://localhost:8080/putMedia

# 或使用默认URL(指向本地测试服务器)
./build/bin/curl_http_chunk

3. 观察双向通信

  • 客户端会发送模拟的视频帧数据
  • 服务器会实时接收数据并返回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                   # 项目说明

功能说明

客户端功能

  1. 数据生成线程: 模拟持续产生的视频帧数据
  2. 流传输: 使用HTTP POST和chunked编码发送数据
  3. 响应处理: 接收和处理服务器的ACK消息
  4. 进度监控: 实时显示传输进度

服务器功能

  1. 流数据接收: 实时接收客户端发送的分块数据
  2. ACK响应生成: 模拟AWS KVS的Fragment确认机制
  3. 并发处理: 支持多线程异步处理数据和响应
  4. 协议模拟: 完整模拟Kinesis Video Streams的putMedia API

技术特性

  • 支持长连接和持续传输
  • 双向流式通信(同时发送和接收)
  • 自动重连和错误处理
  • 内存管理和缓冲区优化
  • 线程安全的数据结构
  • HTTP/1.1 chunked transfer encoding
  • 实时Fragment ACK响应机制

开发说明

编译选项

  • Release模式: 优化性能,适合生产环境
  • Debug模式: 包含调试信息,适合开发调试

curl配置

项目自动编译的curl库包含以下特性:

  • 仅支持HTTP/HTTPS协议
  • 静态链接OpenSSL
  • 启用分块传输编码
  • 禁用不需要的协议以减小体积

许可证

本项目仅用于学习和演示目的。

贡献

欢迎提交Issue和Pull Request来改进项目。

About

A demonstration project based on libcurl for HTTP bidirectional streaming communication, simulating a streaming transmission scenario similar to Amazon Kinesis Video Streams

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 38.1%
  • CMake 22.4%
  • Shell 20.5%
  • Python 19.0%