diff --git a/docs-site/SUMMARY.md b/docs-site/SUMMARY.md index ce86b824..45a207be 100644 --- a/docs-site/SUMMARY.md +++ b/docs-site/SUMMARY.md @@ -33,6 +33,7 @@ - [Spec Review Checklist](specs/SPEC-REVIEW-CHECKLIST.md) - [Playback Backend Unification](specs/playback-backend-unification.md) - [Linux Native Video Spike](specs/linux-native-video-spike.md) +- [Backend-Owned Stream Selection](specs/backend-owned-stream-selection.md) - [Player Facade Enforcement](specs/player-facade-enforcement.md) - [Windows Native Audio Backend](specs/windows-native-audio-backend.md) - [libmpv2 Migration](specs/libmpv2-migration.md) diff --git a/docs/specs/README.md b/docs/specs/README.md index 4ac015a9..9c4eac56 100644 --- a/docs/specs/README.md +++ b/docs/specs/README.md @@ -44,6 +44,7 @@ taken by other work; each carries a ⚠️ note at the top. | Spec | Blocked on / note | |---|---| +| [backend-owned-stream-selection.md](backend-owned-stream-selection.md) | Rust owns direct-play-vs-transcode, transport and quality; players consume one `StreamSelection`. Phase 1 (delete the `.m3u8` sniff) stands alone. Unblocks Linux native video. | | [build-provenance.md](build-provenance.md) | `build.rs` is still bare. ⚠️ suggested id DR-093 is taken. | | [player-facade-enforcement.md](player-facade-enforcement.md) | ~60 `commands.player*` sites still outside the facade; no lint rule. ⚠️ suggested id DR-095 is taken. | | [windows-native-audio-backend.md](windows-native-audio-backend.md) | Blocked on the libmpv2 swap. ⚠️ suggested id IR-030 is taken. | diff --git a/docs/specs/backend-owned-stream-selection.md b/docs/specs/backend-owned-stream-selection.md new file mode 100644 index 00000000..a32391d8 --- /dev/null +++ b/docs/specs/backend-owned-stream-selection.md @@ -0,0 +1,242 @@ +# Spec: Backend-owned stream selection + +**Status:** Proposed +**Requirements:** UR-079 (new) → DR-219 … DR-224 (new); **implements and extends +DR-121**, currently allocated to +[read-through-media-cache.md](read-through-media-cache.md) and not started. +Re-check `requirements.md` before allocating — the ids moved twice while this was +being written (`DR` max was 215, then 218). +**UX spec:** the quality selector in `VideoPlayer.svelte` already exists; this +changes what fills it, not how it looks. +**Supersedes / revises:** takes DR-121 out of +[read-through-media-cache.md](read-through-media-cache.md), which should keep +only its capture/eviction half. Unblocks +[linux-native-video-spike.md](linux-native-video-spike.md). + +**Destination on completion:** +[01-rust-backend.md](../architecture/01-rust-backend.md) — extends the +"Streaming quality ladder" section; and +[03-data-flow.md](../architecture/03-data-flow.md) — playback initiation. The +durable half is the layer line and the `StreamSelection` contract; phases and +acceptance criteria are disposable. + +## Summary + +Make Rust the single owner of *which stream to play* — direct play or transcode, +at what ceiling, over what transport — and hand every player backend a +self-describing selection instead of a bare URL. mpv, ExoPlayer and the HTML5 +`