跳到正文
发现
其他开发者工具

icey:C++ 实时媒体开发工具箱

基于 C++20 的模块化实时媒体栈,把 WebRTC、FFmpeg、HTTP 与 TURN 整合到一起。

admin
发布于 2026-10-28 · 更新于 2026-10-31
浏览
4
访问
0
下载
0
版本
v2.5.3
该作品还没有经过官方审核。访问演示、下载或复制命令前,请自行确认来源可信。

详细介绍

项目简介

icey 是一个用 C++20 编写的模块化实时媒体工具箱,把 FFmpeg、libuv、OpenSSL、llhttp、libdatachannel、Symple、STUN 与 TURN 收进同一套运行时模型,覆盖采集、编码、传输、信令与中继。

所有数据都流经 PacketStream 管线:挂上 Source,串接 Processor,再连到 Sink。管线自己处理背压、丢帧与拆除;借用的数据包在遇到第一个队列或保留适配器之前保持零拷贝,这个边界在图中是显式的。

第三方核心代码(libuv 1.50、llhttp 9.2.1、nlohmann/json 3.11.3、zlib 1.3.1)由 CMake 自动拉取,OpenSSL 3.x、FFmpeg 5+/6+/7+、OpenCV 3.0+ 等系统依赖存在时会自动探测,构建通常在几分钟内完成。项目主页:https://auscaster.com/icey

主要功能

  • WebRTC 媒体流:基于 libdatachannel 的发送与接收路径,内置 Symple v4 信令(WebSocket、认证、presence、房间与呼叫协议)。示例包括 webcam-streamer(约 150 行把摄像头推到浏览器)、media-recorder(服务端用 FFmpeg 解码并录制浏览器摄像头)、file-streamer(把 MP4 文件实时转成 WebRTC 流)。
  • TURN 中继:RFC 5766 TURN 服务器,支持 channel binding 与 TCP,用于穿透对称 NAT。
  • HTTP / WebSocket:构建在 libuv + llhttp 之上,README 给出的单核微 VM 测试中 keep-alive 达到 72,000 req/s。
  • 媒体管线:FFmpeg 编解码,MultiplexPacketEncoder 等处理器可组合进 PacketStream,解码分支还能接 vision、speech 处理器而不影响传输路径。
  • Rust 绑定:icey 安全封装 crate 与 icey-sys(基于 bindgen 的原始 C ABI 层)。
  • 打包模板:提供 Conan、vcpkg、Arch、Homebrew、Debian 的打包文件与渲染命令。

安装与使用

环境要求:Linux 需要 GCC 12+ 或 Clang 15+,macOS 需要 AppleClang 15+(Xcode 15+),Windows 需要 MSVC 2022;另外需要 CMake 3.21+ 和 pkg-config(Linux/macOS)。

从源码构建:

git clone https://github.com/auscaster/icey.git
cmake -B build -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTS=ON
cmake --build build --parallel $(nproc)

作为库接入(CMake FetchContent):

FetchContent_Declare(icey
  GIT_REPOSITORY https://github.com/auscaster/icey.git
  GIT_TAG 2.5.3
)
FetchContent_MakeAvailable(icey)
target_link_libraries(myapp PRIVATE icey::base icey::net icey::http)

安装后也可以使用 find_package(icey REQUIRED) 并链接 icey::base、icey::net、icey::http 等目标。

想从零快速看到浏览器画面,可以运行来自独立 icey-server 仓库的镜像:

docker run --rm --network host ghcr.io/auscaster/icey-server:latest

然后打开 http://localhost:4500,在 icey 这个 peer 上点击 Watch。

更多文档入口:docs/run/index.md(运行)、docs/run/install.md(安装)、docs/operate/deploy.md(部署)、docs/recipes/(HTTP、WebSocket、TURN、WebRTC 示例)、docs/modules.md(模块与依赖图)。

注意事项

  • 许可证为 LGPL-2.1。
  • icey 本身是 C++ 库;可直接运行的产品是另一个仓库 auscaster/icey-server,其可执行文件与包名为 icey-server。
  • 仓库中签入的包管理器文件是发布前的模板,需要针对正式发布的归档渲染 recipe(如 make package-conan、make package-vcpkg、make package-arch、make package-homebrew)。
  • README 中的性能数字为特定单核微 VM 环境下的测试结果,仅供参考。

本作品整理自 GitHub 开源项目 auscaster/icey,原作者 @auscaster,许可证 LGPL-2.1。中文介绍由 AI 根据项目 README 整理,以原仓库为准。

更新记录

  1. v2.5.3当前版本

    2.5.3 修复两项问题:构建机 CPU 调优改为可选,默认发布二进制可在基线目标 CPU 上运行;渲染带标签的 openSUSE recipe 时改为校验当前 auscaster 主页。

  2. v2.5.1

    2.5.1:使用 FFmpeg 8 构建时,改为通过 FFmpeg 编解码器配置 API 查询支持的音频格式、像素格式与采样率,恢复 macOS 与 Nix 构建,且不改变旧版 FFmpeg 的编解码器选择。

评论