Run

icey

The usual C++ stack for realtime and media work is a mess. HTTP on one side, FFmpeg on another, WebRTC hidden behind Google's monolith, TURN treated as somebody else's problem, signalling left as an exercise for the reader.

icey pulls those layers into one runtime. WebRTC, signalling, TURN relay, and media encoding in one C++ stack. Run it as a product. Embed it as a library. Same modules either way.

A small PacketStream graph is the core shape:

PacketStream stream;
stream.attachSource(capture.get());
stream.attach(&session->media().videoSender(), 5);
stream.start();

If you're evaluating alternatives, the split is simple:

libWebRTC (Google)libdatachannelGStreamericey
Build systemGN/NinjaCMakeMesonCMake
Build timeHoursMinutes30+ minMinutes
Binary size50MB+SmallLargeSmall
SSLBoringSSL (conflicts)OpenSSLOpenSSLOpenSSL
Media codecsBundledNoneGObject pluginsFFmpeg (any codec)
Capture/encodeIncludedNoPlugin pipelinePacketStream pipeline
SignallingNoNoNoSymple (built-in)
TURN serverNoNoNoRFC 5766 (built-in)
LanguageC++C++17C/GObjectC++20

libdatachannel gives you the WebRTC transport pipe. icey gives you the pipe, the water, and the faucet.

See It Work

1

Run the server

docker run --rm --network host 0state/icey
2

Open `http://localhost:4500`

3

Click **Watch** on the `icey` peer

Live video in your browser. One binary, no external services.

That binary — icey-server — is built entirely from icey's library modules. The same modules you can use in your own C++ application. The server proves the library works. The library means you are not locked into the server's opinions.

Start With The Job

GoalStart here
Run the media server nowSee It Work
Install icey-serverInstall
Understand the three modes (stream, record, relay)Modes
Understand how the server maps to the libraryArchitecture
Build icey into my own C++ projectGetting Started
Understand the runtime rulesRuntime Contracts
Understand the module layoutModule Map
Build a fast HTTP serviceHTTP Server
Stream a webcam to a browserWebcam To Browser
Record browser media on the serverBrowser To Recorder
Deploy to productionDeploy
Configure TLSTLS
Debug a TURN problemTURN Deployment

Docs vs API Reference

The pages here explain architecture, runtime contracts, workflows, and operations. The API Reference tab is the generated C++ reference from Doxygen. Use the prose docs to understand the shape. Use the API tab for exact type signatures.

Repository