Skip to content

transport::http::mse: support fragmented-MP4 (fMP4) output for universal browser playback #633

Description

@streamer45

Context

transport::http::mse currently emits WebM only — it keys its init-segment handling off the EBML Cluster ID (WEBM_CLUSTER_ID in crates/nodes/src/transport/http_mse.rs). So live HTTP streams are VP9/AV1-in-WebM, which Chromium/Firefox play but Safari/iOS frequently do not.

Surprisingly there's no fMP4 path, even though containers::mp4::muxer already produces fragmented MP4 (mode: stream, ftyp+moov init segment then moof/mdat segments).

Ask

Teach transport::http::mse to accept and serve fragmented MP4 (H.264 or AV1 in fMP4) in addition to WebM — i.e. detect the fMP4 init segment (ftyp/moov) and segment boundaries (moof) the way it currently detects WebM clusters, and advertise the right content_type. A plain <video src> against an fMP4/H.264 stream would then play in Safari/iOS.

Motivation

examples/web-capture cast mode (#631) is WebM-only, leaving a documented Safari/iOS gap for live streams. fMP4 closes it and makes MSE output universal.

Acceptance

transport::http::mse can serve an fMP4 (H.264) live stream that plays in Safari/iOS via a plain <video> element.

Refs: crates/nodes/src/transport/http_mse.rs, crates/nodes/src/containers/mp4.rs (fMP4 mode: stream), #631.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions