WebRTC-IOT 面向物联网/嵌入式设备的现代 C++ WebRTC 库
一个用 C++ 编写的轻量级 WebRTC 实现,专为物联网和嵌入式设备流媒体应用而设计。
·
webrtc-iot 是一个用 C++ 编写的现代 WebRTC 实现,专为物联网和嵌入式设备流媒体应用而设计。该库经过大量重构,提供了简洁的 C++ 接口,同时保持了在资源受限环境中的性能和可移植性。
✨ 主要特性
媒体支持
- 视频编解码器
- H.264,支持分片传输
- 可配置帧率和码率
- 音频编解码器
- G.711 PCM (A-law/µ-law)
- OPUS,支持可配置码率
- 实时处理
- 优化的 RTP/RTCP 处理
- 动态 SSRC 生成
WebRTC 核心功能
- 端到端连接
- ICE (交互式连接建立)
- STUN/TURN 服务器支持
- IPv4/IPv6 双栈
- 安全性
- DTLS-SRTP 加密
- 证书指纹验证
- 安全密钥交换
- 数据通道
- 基于 SCTP 的可靠/不可靠消息传输
- 支持二进制和文本数据
- 每个连接支持多个通道
️ 架构设计
现代 C++ 设计
- RAII 资源管理
- 智能指针 确保内存安全
- std::function 回调函数,灵活的事件处理
- 命名空间组织 (
rtc::
命名空间) - 异常安全 操作
项目结构
webrtc-iot/
├── include/ # 公共头文件 (C++ 和 C)
├── src/ # 实现文件
├── tests/ # 测试应用程序
└── third_party/ # 外部依赖
核心类
rtc::PeerConnection
- WebRTC 端到端连接主类rtc::IceAgent
- ICE 连接管理rtc::RtpEncoder/RtpDecoder
- 媒体处理rtc::DtlsSrtpSession
- 安全层rtc::SctpAssociation
- 数据通道支持
依赖库
库 | 用途 | 版本 |
---|---|---|
mbedTLS | 加密和 TLS | 最新版 |
libsrtp | SRTP 加密 | v2.x |
usrsctp | 数据通道 SCTP | 最新版 |
所有依赖库都通过 CMake 自动下载和构建。
快速开始
系统要求
sudo apt update && sudo apt install -y git cmake build-essential
构建和测试
# 克隆包含所有子模块的仓库
git clone --recursive https://github.com/wanghengwen/webrtc-iot
cd webrtc-iot
# 构建库和测试程序
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j$(nproc)
# 运行基本连接测试
./build/tests/test_agent
# 测试音频回声的端到端连接
./build/tests/test_peer_offer
基本使用示例
#include "peer_connection.hpp"
int main() {
// 配置端到端连接
rtc::PeerConfiguration config;
config.audio_codec = rtc::MediaCodec::PCMU;
// 添加 STUN 服务器用于 NAT 穿透
config.ice_servers.push_back({
.urls = "stun:stun.l.google.com:19302"
});
// 创建端到端连接
rtc::PeerConnection pc(config);
// 设置回调函数
pc.on_ice_connection_state_change([](rtc::PeerConnectionState state) {
std::cout << "连接状态: " << static_cast<int>(state) << std::endl;
});
// 创建和处理 offer/answer
std::string offer = pc.create_offer();
std::cout << "本地 offer: " << offer << std::endl;
return 0;
}
测试应用程序
项目包含多个演示不同功能的测试应用程序:
核心测试
test_agent
- ICE 代理和 STUN 连接测试test_peer_offer
- 完整的端到端连接和音频回声测试test_dtls
- DTLS-SRTP 安全层测试
音频回声测试
test_peer_offer
应用程序演示了: - 随机 SSRC 生成 - 音频数据包生成和验证 - 实时音频流和回声验证 - 连接状态监控
# 运行音频回声测试 (发送 1000 个数据包,间隔 20ms)
./build/tests/test_peer_offer
配置选项
构建选项
# 带详细日志的调试构建
cmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
# 针对大小优化的发布构建
cmake -S . -B build -DCMAKE_BUILD_TYPE=MinSizeRel
# 禁用数据通道支持
cmake -S . -B build -DCONFIG_ENABLE_DATACHANNEL=OFF
运行时配置
include/config.h
中的关键配置选项: - CONFIG_MTU
- 最大传输单元 (默认: 1500) - CONFIG_KEEPALIVE_TIMEOUT
- 连接超时 (默认: 10000ms) - CONFIG_ENABLE_DATACHANNEL
- 数据通道支持开关
安全特性
- DTLS 1.2 媒体流加密
- SRTP 实时媒体保护
- 证书指纹验证 对等端验证
- 安全随机 SSRC 生成
- 内存安全 C++ 实现
贡献指南
欢迎贡献!请确保: 1. 代码遵循现有的 C++ 风格 2. 新功能包含适当的测试 3. 为 API 更改更新文档 4. 提交 PR 前所有测试通过
支持
- 问题反馈: GitHub Issues
- 文档: 参见内联代码注释和测试应用程序
- 示例:
tests/
目录中的测试应用程序演示了库的使用方法
更多推荐
所有评论(0)