Skip to content

Conversation

@kixelated
Copy link
Collaborator

@kixelated kixelated commented Jan 22, 2026

Replaces #822

Overview:

  1. Added support for --passthrough (Rust only) when using HLS and fMP4 import to write the raw MP4 bytes.
  2. MSE is a separate Backend, so it will be tree-shaken when not used.
    • The same but reverse for WebCodecs. No need for a fMP4 encoder.
  3. The <hang-watch> element takes either a <video> or <canvas> tag to switch between backends.
    • Won't tree-shake, use the JS API if you want to reduce the bundle size.
  4. Watch.Broadcast no longer owns the video/audio component; they have to be constructed separately.
    • Allows tree-shaking Watch.Audio.Source and Watch.Video.Source.
    • Opens the door for more tree-shakable modules that take a Broadcast.
  5. Removed support for the unused raw container.
    • In hind-sight, a new container format should use delta encoded timestamps anyway.
    • Additionally, timestamps are being added to the moq-lite layer that we could reuse.
    • Sorry @gdavila, I didn't think enough before filing that issue.
  6. The "mse" container contains an init_track, used to initialize the decoder.
    • This is inlined in the CMSF draft, but I plan to use it via a separate track for HLS fallback.
    • It's more efficient this way when renditions share an init segment.
  7. A bunch of API changes to support the generic Backend interface.
    • ex. watch.audio.muted instead of watch.muted.

TODO:

  • WebCodecs support for CMAF (decode MP4)
  • MSE support for hang (encode MP4)
  • Fix fMP4 import --passthrough not working with bbb
  • Fix the buffering signal
  • Fix the stats panel
  • Actually review the HLS import changes
  • Send jitter in the catalog so we can increase the latency on demand?
  • Remove init_track and build it in memory instead?

@kixelated kixelated requested a review from jdreetz January 22, 2026 22:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants