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.
Context
transport::http::msecurrently emits WebM only — it keys its init-segment handling off the EBML Cluster ID (WEBM_CLUSTER_IDincrates/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::muxeralready produces fragmented MP4 (mode: stream, ftyp+moov init segment then moof/mdat segments).Ask
Teach
transport::http::mseto 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 rightcontent_type. A plain<video src>against an fMP4/H.264 stream would then play in Safari/iOS.Motivation
examples/web-capturecast 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::msecan 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(fMP4mode: stream), #631.