Observation Deck Android
The couch remote for Observation Deck: browse the library on a phone or tablet and cast it to a Chromecast Ultra.
What it does
- Home, Movies and TV tabs with one search across movies and shows. Home shows Continue watching and recently added rows, and Movies filters by All, Unwatched, In progress and Watched.
- Show pages with season chips and per-episode progress. Item pages with Resume or Play from start, and audio track and subtitle pickers.
- Casts with the standard Cast button. While casting, a remote screen offers play/pause, a seek bar showing absolute position, 10-second jumps, next episode, audio and subtitle switching, subtitle sync, stop and disconnect.
- Can also play on the phone itself, with resume, seeking and progress reported back to the server.
- Chooses between a home and a remote server address by probing both and preferring home, re-checking when the network changes.
- Lists servers advertising themselves on the network, and has a home-screen widget with play, pause and an open-app shortcut for whatever is casting.






Screenshots use a made-up library of generated test clips and artwork. Conan the Barbarian (1982) stands in as the film being played; the artwork and frames are drawn for the page, not taken from the film.
Under the hood
- Kotlin with Jetpack Compose and Material 3; OkHttp for the API, Coil for artwork, a Glance widget and Media3 ExoPlayer for on-phone playback.
- The Cast LOAD follows the server's contract: stream URL with token, start offset for piped streams, duration, poster, WebVTT tracks and custom data for the receiver. Position, audio and subtitle selection come back from the receiver's state broadcasts on a custom message channel.
- With the custom receiver the receiver reports watch progress and the app stays quiet. With Google's default receiver the app reports progress itself.
- Address probing uses the HTTPS hostname, so another device on the same private address elsewhere fails the TLS handshake instead of being mistaken for the server.
- Server defaults are baked in at build time from local properties.
- A hidden format-test screen lists library items covering direct, remux and transcode plays and multiple tracks, as a manual checklist.