# rpt **Repository Path**: crawler-w/rpt ## Basic Information - **Project Name**: rpt - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-01 - **Last Updated**: 2025-12-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RTP视频组包模块 一个高效、可靠的C++模块库,用于处理RTP视频数据包的接收、去重、排序和组装,支持H.264视频编码。 ## 📋 功能特性 ### 基础功能 ✅ - ✅ 接收和解析RTP数据包 - ✅ 数据包去重(剔除重复包) - ✅ 数据包排序(处理乱序) - ✅ 组装完整视频帧 - ✅ 处理H.264 FU-A分片 - ✅ 无效数据包过滤 - ✅ 完整的API接口 ### 进阶功能 ✅ - ✅ 丢包率统计 - ✅ 性能优化(内存池、移动语义) - ✅ 线程安全支持 - ✅ 帧类型识别(I/P/B帧) - ✅ 可解码性判断 ## 🚀 快速开始 ### 1. 环境要求 - **操作系统**: Windows 10/11 - **编译器**: MinGW-w64 (GCC 8.1.0+) - **C++标准**: C++11/14 - **构建工具**: GNU Make ### 2. 安装依赖 详见 [开发环境配置指南](docs/开发环境配置指南.md) ### 3. 下载Google Test ```bash # 进入项目目录 cd D:\rpt # 创建third_party目录 mkdir third_party cd third_party # 下载Google Test(使用git或手动下载) git clone https://github.com/google/googletest.git # 或者手动下载: # 访问 https://github.com/google/googletest/releases # 下载最新版本ZIP,解压到 third_party/googletest ``` ### 4. 编译项目 ```bash # 编译示例程序 mingw32-make # 编译并运行测试 mingw32-make test # 运行示例程序 mingw32-make run # 清理构建文件 mingw32-make clean ``` ## 📖 使用示例 ### 基本用法 ```cpp #include "rtp_assembler.h" int main() { // 创建组装器 rtp::RTPAssembler assembler; // 接收RTP数据包 uint8_t packet_data[1500]; size_t packet_len = ReceiveFromNetwork(packet_data); assembler.InputPacket(packet_data, packet_len); // 获取完整帧 rtp::VideoFrame frame; if (assembler.GetNextFrame(frame)) { printf("收到完整帧: %zu 字节\n", frame.data.size()); printf("帧类型: %s\n", frame.type == rtp::FRAME_TYPE_I ? "I帧" : "P帧"); // 送给解码器 if (frame.is_decodable) { Decode(frame.data.data(), frame.data.size()); } } // 获取统计信息 rtp::Statistics stats = assembler.GetStatistics(); printf("丢包率: %.2f%%\n", stats.loss_rate * 100); return 0; } ``` 更多示例请参考 [src/example.cpp](src/example.cpp) ## 📁 项目结构 ``` rpt/ ├── docs/ # 文档 │ ├── 需求分析文档.md │ ├── 开发环境配置指南.md │ ├── RTP协议详解.md │ └── 模块设计文档.md ├── include/ # 公共头文件 │ ├── rtp_types.h # 数据类型定义 │ ├── rtp_packet.h # RTP包定义 │ └── rtp_assembler.h # 组装器接口 ├── src/ # 源代码 │ ├── rtp_packet.cpp # RTP包实现 │ ├── rtp_assembler.cpp # 组装器实现 │ └── example.cpp # 示例程序 ├── test/ # 测试代码 │ ├── test_main.cpp # 测试入口 │ ├── test_packet.cpp # 包解析测试 │ └── test_assembler.cpp # 组装器测试 ├── third_party/ # 第三方库 │ └── googletest/ # Google Test ├── Makefile # 构建脚本 └── README.md # 本文件 ``` ## 🧪 测试 项目包含完整的单元测试,覆盖以下场景: - ✅ 正常顺序包处理 - ✅ 乱序包处理 - ✅ 重复包去重 - ✅ 丢包检测 - ✅ 序列号回绕 - ✅ FU-A分片重组 - ✅ 无效包过滤 - ✅ 多帧处理 运行测试: ```bash mingw32-make test ``` ## 📊 性能指标 | 指标 | 数值 | |------|------| | 单包处理延迟 | < 1ms | | 支持码率 | > 1Gbps | | 内存占用 | < 100MB | | 去重时间复杂度 | O(1) | ## 📚 文档 详细文档请参考 `docs/` 目录: 1. [需求分析文档](docs/需求分析文档.md) - 项目需求和规划 2. [开发环境配置指南](docs/开发环境配置指南.md) - 环境搭建步骤 3. [RTP协议详解](docs/RTP协议详解.md) - RTP和H.264协议说明 4. [模块设计文档](docs/模块设计文档.md) - 架构和设计 ## 🔧 API参考 ### RTPAssembler类 ```cpp class RTPAssembler { public: // 构造函数 RTPAssembler(); // 输入RTP数据包 bool InputPacket(const uint8_t* data, size_t len); // 获取下一个完整帧 bool GetNextFrame(VideoFrame& frame); // 获取可用帧数量 int GetAvailableFrameCount() const; // 获取统计信息 Statistics GetStatistics() const; // 重置状态 void Reset(); // 设置超时时间(毫秒) void SetTimeout(uint32_t timeout_ms); // 设置最大缓冲帧数 void SetMaxBufferFrames(uint32_t max_frames); // 启用/禁用线程安全 void SetThreadSafe(bool enable); }; ``` ### VideoFrame结构 ```cpp struct VideoFrame { std::vector data; // 帧数据 uint32_t timestamp; // 时间戳 uint16_t start_seq; // 起始序列号 uint16_t end_seq; // 结束序列号 FrameType type; // 帧类型 (I/P/B) bool is_complete; // 是否完整 bool is_decodable; // 是否可解码 }; ``` ### Statistics结构 ```cpp struct Statistics { uint32_t received_packets; // 接收包数 uint32_t duplicate_packets; // 重复包数 uint32_t invalid_packets; // 无效包数 uint32_t lost_packets; // 丢失包数 uint32_t assembled_frames; // 组装帧数 float loss_rate; // 丢包率 }; ``` ## 🐛 已知问题 - 超时清理功能使用简单计数器,实际应用应使用系统时间 - 暂不支持STAP聚合包模式(较少使用) - 暂不支持H.265编码(可扩展) ## 🤝 贡献 欢迎提交Issue和Pull Request! ## 📄 许可证 MIT License ## 👨‍💻 作者 RTP组包模块开发团队 ## 📮 联系方式 如有问题,请提交Issue或联系开发团队。 --- **开发时间**: 2025年12月 **版本**: v1.0.0 **状态**: ✅ 基础要求完成 | ✅ 进阶要求完成