Skip to content

v2.0.0

Choose a tag to compare

@Wkkkkk Wkkkkk released this 08 Jul 14:33
· 95 commits to main since this release

srt-whep v2.0.0

A ground-up rewrite of the signaling and streaming internals, plus fixes that
restore WebRTC media delivery on both Linux and macOS. Same product — ingest one
MPEG-TS-over-SRT stream and fan it out to WHEP/WebRTC viewers — on a far more
robust core.

Highlights

  • Rebuilt signaling plane. All viewer connection state now lives in a single
    coordinator actor (one tokio task) with per-viewer failure isolation, a
    consecutive-failure watchdog that restarts a wedged pipeline, and a periodic
    sweep that reaps timed-out and abandoned handshakes. Replaces the previous
    ad-hoc locking (ADR 0001).
  • Pipeline supervisor. A dedicated restart loop runs the GStreamer pipeline
    and recovers from EOS/errors with backoff; a single Ctrl-C cleanly stops
    signaling, pipeline, and the HTTP server together.
  • WebRTC media fixed (WHEP no-media). The app now resolves the rswebrtc
    plugin from the GStreamer installation instead of a shadowing static copy,
    fixing the version skew that produced connected-but-silent WHEP sessions. The
    Docker image sources rswebrtc from the LiveKit base so Linux WHEP works out
    of the box (ADR 0003, 0004).
  • Branch-error isolation. One viewer's branch failing no longer restarts the
    whole pipeline and drops every other viewer (ADR 0002).

Features

  • -D/--decode-video — inserts avdec_h264 before whipclientsink so
    webrtcsink re-encodes, working around the webrtcsink 0.15.x macOS H264
    passthrough not-negotiated bug. Off by default.
  • CLI flags for coordinator tunables (handshake timeouts, watchdog threshold) —
    defaults unchanged.
  • Startup assertion that the listener port matches the pipeline's loopback WHIP
    port, failing fast on misconfiguration.
  • u16 port typing end to end; latency option.

Internal / quality

  • Architecture-deepening pass (C1–C5): split BranchControl / PipelineLifecycle
    seams, pipeline lock kept private and never held across awaits, dedicated GLib
    main-loop thread, typed pipeline error seam.
  • CI runs the test suite + fmt + clippy on pull requests and smoke-tests the
    Docker image before publishing; GitHub Actions bumped; Dependabot enabled.
  • New docs: CONTEXT.md domain glossary, ADRs 0001–0004, verified macOS codec
    profile table.

Upgrade notes

No configuration migration required — existing CLI invocations keep working
because all new flags default to the prior behavior.