- [x] add miruro streaming support - [x] investigate and fix audio when streaming from miruro - audio seems to crackle (not for youtube i think; only for miruros) - [x] add chrome cast support — implemented; verify playback, captions and A/V sync on a physical Cast device - [x] fix premature receiver-launch timeout: reports failure even though Chromecast subsequently connects and playback works - [x] fix TV volume slider jitter: receiver updates appear to compete with local volume adjustments - [x] investigate and reduce slow buffering after seeking in YouTube videos while casting, compared with local playback — reuse probed inputs and cache completed segments; confirm perceived improvement on TV - [x] fix Miruro Cast upstream overfetch: select HLS streams and share bounded video/audio packet buffering — verify sustained playback on TV - [x] styling/ui changes — implemented; verify layout and casting appearance in the app: - move the captions button in the controls left of the compact mode icon - place the Cast button between pin and settings in the top-right container; in compact mode, between exit compact mode and settings - don't leave and empty spot where the captions were supposed to be if captions aren't available; buttons should be moved over in that case. - the background is currently black in the player when casting (chrome cast), but we should follow the design language of the rest of the app. - replace the current chrome cast icon with the apple tv casting icon. - [ ] in the "choose what to play" screen, we should change the youtube button to general streaming - we can figure out the stream and how to handle it from the url (i.e. if youtube url, handle as youtube stream; if miruro url, handle accordingly) - [ ] evaluate playback optimization opportunities for YouTube and Miruro — measure benefits before changing behavior - [ ] coalesce superseded, not-yet-started seeks in the player and Cast controls; preserve accumulated relative skips and play/pause ordering - [ ] expand Cast H.264/AAC remux coverage with keyframe-aligned segments; preserve seek accuracy, timestamps and receiver compatibility - [ ] reuse decoder/encoder state during sequential Cast playback; reset on random seeks and preserve independent keyframes and AAC continuity - [ ] evaluate VideoToolbox hardware video decoding for native and Cast playback; retain software fallback for unsupported formats - [ ] benchmark cold start, cached/uncached seeks and sustained playback separately to prioritize the actual bottlenecks - do not enable Miruro HTTP persistence without preserving origin/header checks, or increase caches/shorten Cast segments without measuring the memory/request/codec tradeoffs