Use native web playback with shared Rust media preparation #9

Merged
conrad merged 1 commit from codex/native-playback into main 2026-09-06 01:34:32 -04:00
Owner

Video and audio now use browser-native controls, with owner-only Media Session metadata, transport actions and position updates. The retained player and Rust playback session survive view navigation; the mini player keeps title, creator and artwork independently of the visible library view.

Move the existing native playback/CMAF planners into media-processing-core, consumed by both native code and browser WASM. Browser remuxing uses the Rust track plan and the same fragmented-MP4 muxer settings as native FFmpeg; remove duplicated JavaScript codec and CMAF-selection policies. Prefer receipt-verified HLS bound to the exact pinned source. Unsupported containers can use a bounded, disk-backed FFmpeg packet copy before the existing decoder fallback. Ship a pinned small libav.js runtime with matching downloadable source archives.

Validation: 786 server tests pass (4 ignored), 18 shared-processing tests, 531 web tests, formatting, TypeScript, WASM and production builds. Actual Safari played the Rust-planned HEVC/hvc1 fragmented MP4 with native fullscreen and Picture in Picture. Chrome verified playback, seeking, local-cache reuse and cancellation; all 120 video and 217 audio packets were preserved.

Limits: browser outputs remain local cache files. Client artifact uploads, automatic CMAF preparation and hardware-transcode adapters are not implemented here. iPhone background playback and receiver-side AirPlay have not been validated.

Video and audio now use browser-native controls, with owner-only Media Session metadata, transport actions and position updates. The retained player and Rust playback session survive view navigation; the mini player keeps title, creator and artwork independently of the visible library view. Move the existing native playback/CMAF planners into media-processing-core, consumed by both native code and browser WASM. Browser remuxing uses the Rust track plan and the same fragmented-MP4 muxer settings as native FFmpeg; remove duplicated JavaScript codec and CMAF-selection policies. Prefer receipt-verified HLS bound to the exact pinned source. Unsupported containers can use a bounded, disk-backed FFmpeg packet copy before the existing decoder fallback. Ship a pinned small libav.js runtime with matching downloadable source archives. Validation: 786 server tests pass (4 ignored), 18 shared-processing tests, 531 web tests, formatting, TypeScript, WASM and production builds. Actual Safari played the Rust-planned HEVC/hvc1 fragmented MP4 with native fullscreen and Picture in Picture. Chrome verified playback, seeking, local-cache reuse and cancellation; all 120 video and 217 audio packets were preserved. Limits: browser outputs remain local cache files. Client artifact uploads, automatic CMAF preparation and hardware-transcode adapters are not implemented here. iPhone background playback and receiver-side AirPlay have not been validated.
Use native web playback with shared Rust media preparation
All checks were successful
deploy-fly / validate (push) Successful in 7m56s
deploy-fly / deploy (push) Successful in 6m35s
9d2a51cda2
conrad merged commit 9d2a51cda2 into main 2026-09-06 01:34:32 -04:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
conrad/media!9
No description provided.