xMedia is a server-side platform for professional media stream management. Every source, every transcode, every output is a stream — controlled through a single WebSocket API, with frame-accurate replay and FFmpeg-native processing built in.
Every source you ingest, every transcode you run, every output you push — xMedia exposes all of them as streams through a single unified API. Subscribe, process, buffer, or forward any stream with the same calls.
// Add any FFmpeg-compatible source ws.send({ cmd: "SourceStreamsAdd", url: "srt://camera1.prod:9000", name: "Camera 1 — ISO" }); // → stream_id: "cam1" // Enable replay buffer on the stream // (RAM or disk, configurable depth) ws.send({ cmd: "StreamReplayEnable", stream_id: "cam1", buffer_sec: 300, // 5 min rolling storage: "disk" }); // Jump to 90 s ago, play at 0.5× ws.send({ cmd: "ReplaySeek", stream_id: "cam1", offset_sec: -90, speed: 0.5 }); // Export a clip directly to disk ws.send({ cmd: "ReplayExport", stream_id: "cam1", from_sec: -90, to_sec: -10, format: "mp4" });
// Decode + scale to 720p proxy ws.send({ cmd: "StreamTranscode", stream_id: "cam1", video: { codec: "h264", width: 1280, height: 720, bitrate:"4M", hw_accel:"cuda" // auto NVIDIA } }); // → new stream_id: "cam1_720p" // Apply any FFmpeg filtergraph ws.send({ cmd: "StreamFilter", stream_id: "cam1_720p", filtergraph: "overlay=10:10", overlay_file: "/assets/logo.png" }); // → stream_id: "cam1_720p_logo" // Mix multiple streams into one ws.send({ cmd: "StreamMix", inputs: ["cam1", "cam2", "gfx"], layout: "pgm" }); // → stream_id: "program_out"
// Push any stream to any FFmpeg dest ws.send({ cmd: "StreamPublish", stream_id: "program_out", outputs: [ { url: "srt://cdn.example.com:4200" }, { url: "rtmp://live.youtube.com/..." } ] }); // Or output to NDI / Blackmagic SDI ws.send({ cmd: "StreamPublish", stream_id: "program_out", outputs: [ { type: "ndi", name: "PGM Output" }, { type: "bmd", device: 0 } // DeckLink ] }); // 24/7 segmented recording ws.send({ cmd: "StreamRecord", stream_id: "program_out", path: "/archive/{date}/{hour}.ts", segment_sec: 3600, audio_overlap: true // seamless join });
Ingest, process, replay, and deliver — every capability is a first-class API citizen. Mix and chain them in any order your production demands.
xMedia is built for automation. Every capability exposed in the Web UI is equally available through the API — with the same performance and latency guarantees.
Primary control interface. Full bidirectional RPC over WebSocket with JSON payloads. Subscribe to stream events, issue commands, get real-time status. Works from any language.
Deep integration for embedded use. Zero-copy access to stream data, direct frame callbacks, minimal overhead. Ideal for building products on top of xMedia.
High-throughput alternative for service-to-service automation. Strongly typed Protobuf schema, bi-directional streaming, and lower overhead for high-frequency control loops.
Full xMedia control from inside Unreal Engine. Route live camera feeds into virtual scenes, publish composited output as streams, and sync everything to timecode — without leaving your VP workflow.
From live sports replay to virtual production pipelines — here's how engineers are deploying xMedia today.
Ingest multiple camera ISO feeds, enable replay buffer on each. Trigger frame-accurate slow-motion, reverse playback, and clip export the moment the play ends — all from a single API call or operator UI.
Mix multiple sources into a program stream, overlay graphics, transcode to broadcast specs, and push simultaneously to SDI hardware, NDI, and CDN endpoints. 24/7 segmented recording runs in parallel with zero interruption.
Feed live camera streams directly into Unreal scenes as textures. Publish composited UE output back as an xMedia stream. Sync everything to studio timecode and control the whole pipeline from Blueprint nodes or the WebSocket API.
Chain multiple xMedia servers together — each subscribes to streams published by others. Build redundant, distributed ingest and processing topologies without custom middleware. Control the whole graph via the WebSocket API.