Media transcode

Koder Transcode

Area: Media · Sector: Compute · Status: v0.1.5 (Development)

Transcoding pipeline for the Koder Stack. Responsible for converting videoaudio uploads into optimized streaming formats (DASHHLS/CMAF) with multiple renditions, codecs, and HDR formats.

Architecture

  • *ubstrate* Rustbased job queue with inmemory (v0.1) and KDB-backed (v0.2+) storage.
  • *orker (subprocess)* FFmpeg-powered worker pool with Bubblewrap (bwrap) sandboxing — original v0.1 path, still supported.
  • *orker (pureRust)* pipeline::run_pipeline composes any VideoEncoder (rav1e ships pureRust; x264/x265 ship via cgo behind feature flags; audio wraps queued in XCODE) with Fmp4Muxer for a nosubprocess transcode flow per RFC v2 ADR-002.
  • *rogress* Real-time progress streaming via ProgressChannelPROBEPACKAGEENCODE/FINALIZE stages emitted by both worker paths.

Key Features

  • [x] Job queue with priority and worker capability matching (XCODE-).
  • [x] Sandboxed FFmpeg execution using bwrap (XCODE-).
  • [x] Multirendition codec ladder (XCODE).
  • [x] DASHHLSCMAF manifest generation (XCODE-#007#008).
  • [x] GPU acceleration (NVENCQSVVAAPI) (XCODE-).
  • [x] Live ingest (XCODE-).
  • [x] HTTP API + Prometheus metrics + OTel tracing (XCODE-#017#021).
  • [x] fmp4 fragment muxer — pure Rust, no subprocess (XCODE-).
  • [x] rav1e AV1 encoder wrap, featuregated (XCODE).
  • [x] Bench harness (XCODE-) — manifest + queue + muxer + encoder hot paths.
  • [x] PureRust pipeline composing encoder + muxer + progress (XCODE).
  • [x] x264 cgo encoder wrap — pregenerated bindgen 0.71 bindings + libx264 link (XCODE).
  • [x] x265 cgo encoder wrap — pregenerated bindgen 0.71 bindings + libx265 link (XCODE).
  • [x] Audio encoder wraps — Opus (audiopus) + AACLC (fdkaac) (XCODE-).
  • [x] Pertenant rate limiter on /v1/jobs via koder_foundation_util::RateLimiter (XCODE).
  • [x] Input URI scheme validation (blob:// / file:// / http(s):// only) (XCODE-).
  • [x] TranscodeEventSink — JobAccepted / Claimed / SegmentEmitted / Completed / Failed (XCODE-).
  • [x] kdb_transcode_encoder_seconds{codec, height} perencoder histogram (XCODE).
  • [x] worker.rs marked legacy; pipeline.rs is canonical worker (XCODE-).
  • [x] run_audio_pipeline for Spotifyside audioonly encode flow (XCODE-).
  • [x] Encoder bench coverage — x264x265opus/aaclc latency (XCODE).
  • [x] Tenant isolation auth — Bearer token → allowed_tenants (XCODE-).
  • [x] Multirendition fanout via tokio task pool with semaphore (XCODE-).
  • [x] bin/worker.rs migrated from subprocess ffmpeg to pureRust ladder pipeline (XCODE).

Usage

use koder_transcode::{JobQueue, TranscodeJob, TranscodeProfile};

let queue = JobQueue::new();
let profile = TranscodeProfile::youtube_full();
let job = TranscodeJob::new("my-tenant", "blob://uploads/vid.mp4", profile);
let job_id = queue.enqueue(job)?;

Pure-Rust pipeline (RFC v2)

use koder_transcode::{
    run_pipeline, EncoderConfig, Fmp4Muxer, MuxerConfig, MuxerTrack,
    ProgressChannel, Rav1eEncoder, VideoFrame,
};

let mut enc = Rav1eEncoder::new(EncoderConfig {
    width: 1920, height: 1080,
    bitrate_kbps: 5_000, frame_rate: 30, quality: 6,
})?;
let mut mux = Fmp4Muxer::new(MuxerConfig {
    tracks: vec![MuxerTrack::av1(1, 1920, 1080)],
    fragmented_duration: 600_000,
});
let progress = ProgressChannel::new();
let frames: Vec<VideoFrame> =  vec![];
let out = run_pipeline(&mut enc, &mut mux, &frames, &progress, "job-1")?;
// out.init_segment + out.fragments → DASH/HLS CMAF segment set.
  • data/blob: Input/output substrate.
  • engines/sdk/koder_player: Consumer-side playback.
  • products/horizontal/play/engine: Consumer flagship integration.

Source: ../home/koder/dev/koder/meta/docs/stack/modules/media-transcode.md