# 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 `