Name channels live/<name>, use Recreate, feed the loop a uniform GOP

FixKlusterServices
Shipped
August 19, 2026 at 2:35 AM UTC
Author
Kamo
Commit
a00e3d0

Three defects found by exercising the deployed service. 1. The /live/ route 404'd through Traefik. MediaMTX answers the first HLS request with a 302 to `?cookieCheck=1` at an absolute path it builds itself, so under StripPrefix that Location pointed outside the route and the player followed it into a 404. Channels are now NAMED `live/<channel>` — MediaMTX accepts nested path names — so the path it thinks it is serving equals the path the browser asked for and no StripPrefix is needed. The WHEP route keeps its exact-regex match, now with an explicit priority instead of relying on Traefik's rule-length tiebreak. 2. The rollout could never complete. The pod binds hostPort 8189 for WebRTC ICE, which is an exclusive node resource, so under maxSurge 1 / maxUnavailable 0 the surge pod sat Pending waiting for a port the old pod would not release until the surge pod went Ready. Observed live as a Pending pod beside a healthy one — the same shape as qdrant's WAL lock. Switched to Recreate. 3. The live muxer warned "segment duration changed from 2s to 3s - this will cause an error in iOS clients": the source MP4's keyframes are irregular, so segments could not be uniform. The encode job now also remuxes the 720p rung back to MP4 as loop.mp4 (no re-encode — that rung already has forced 2s keyframes) and the init container prefers it, falling back to the original so a pod still starts before the job has ever run.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing