Engineering · Series

Add Google Cast features to your apps

A four-part field guide to shipping real Chromecast support — custom receivers, WebRTC over the Cast message bus, decoder limits, and production hardening.

Google Cast looks simple from the couch and gets strange fast from the code. The official samples cover playing a video URL; they say almost nothing about what a Chromecast actually is — a browser you can launch on someone's TV, with a message pipe back to your app — and even less about what happens when you push it: screen mirroring, WebRTC, 4K decode limits, audio sync.

This series is the guide we wish we'd had while building the casting feature in Remotype. It walks the whole distance in four parts:

  1. Fundamentals — the correct mental model, registering and launching your own receiver app, and the unpublished-app trap that stalls most teams on day one.
  2. WebRTC signaling — using the Cast custom namespace as your signaling channel, so media flows peer-to-peer at sub-second latency.
  3. Resolution and decoder limits — the silent cliffs in Chromecast hardware decoding, and how to pick resolutions that survive them.
  4. Audio and adaptive quality — adding sound, adapting bitrate to the network, and the hardening that separates a demo from a product.

By the end you can take an app that renders anything — a screen, a canvas, a video element — and put it on a TV with latency low enough to type against. Every gotcha in these posts was paid for in real debugging hours; none of them are in the official docs.

Part 1 of 4

Fundamentals and Launching Your Own Receiver

Google Cast is not a video protocol — it's an app launcher with a message bus. How casting actually works, registering a custom receiver, and the unpublished-app trap that stalls most teams on day one.

August 3, 2026 · 5 min read

Part 2 of 4

WebRTC Signaling Over the Cast Custom Namespace

Establishing a sub-second WebRTC stream to a Chromecast without a signaling server — and the four handshake bugs that fail in total silence.

August 3, 2026 · 6 min read

Part 3 of 4

Resolution, Aspect Ratio, and the Silent Decoder Cliffs

Why a 3600×2338 stream renders nothing while 3546×2304 is flawless: H.264 Level 5.1 macroblock math, the 4096×2304 hardware cap, and why "connected" proves nothing about pixels.

August 3, 2026 · 5 min read

Part 4 of 4

Audio, Adaptive Bitrate, and Production Hardening

Separated Opus audio, the one-word SDP mistake that breaks everything, bitrate ladders that start low and climb, and a fallback chain that never dead-ends.

August 3, 2026 · 6 min read