Google Cast — is een technologie van Google voor het streamen van multimedia-inhoud van mobiele apparaten naar televisies en audiosystemen via het Cast-protocol. SDK stelt ontwikkelaars in staat om Chromecast-ondersteuning toe te voegen aan Android- en iOS-apps, waarbij video, audio en afbeeldingen naar grote schermen worden verzonden. Volgens Google Cast Developer Documentation, 2025 zijn er wereldwijd meer dan 100 miljoen Chromecast-apparaten verkocht en wordt Cast SDK gebruikt in meer dan 40.000 apps.
Belangrijkste
Google Cast — is een draadloos multimedia-overdrachtprotocol ontwikkeld door Google voor streaming van mobiele apparaten, laptops en tablets naar televisies, luidsprekers en andere schermen. In tegenstelling tot AirPlay (Apple) of Miracast gebruikt Cast het „stuur URL”-model (send-to-device): de mobiele app stuurt de URL van de inhoud naar Chromecast en het apparaat laadt en speelt de stream zelf, zonder de telefoon te belasten.
Het belangrijkste voordeel van Google Cast ten opzichte van directe streaming (screen mirroring) — energie-efficiëntie. Nadat het afspelen is begonnen, fungeert de telefoon alleen als afstandsbediening: de gebruiker kan de app minimaliseren, het scherm vergrendelen of naar een andere app gaan — de video blijft afspelen op de televisie. Volgens Google (2025) verbruikt Cast 80% minder energie op de telefoon in vergelijking met mirroring-oplossingen.
Google Cast ondersteunt niet alleen Chromecast, maar ook ingebouwde Cast-ontvangers in televisies van Sony, TCL, Philips, Hisense en andere fabrikanten met Google TV of Android TV. Cast wordt ook ondersteund in audiosystemen (Nest Audio, Sonos met Cast) en Chromecast Audio. Het Cast-protocol werkt via Wi-Fi (2,4/5 GHz) en vereist dat het verzendende apparaat en de ontvanger zich in hetzelfde netwerk bevinden.
De Google Cast-architectuur bestaat uit drie componenten: de Afzender (mobiele app), de Ontvanger (app op Chromecast/televisie) en het transportprotocol. De Afzender gebruikt Cast SDK om apparaten in het netwerk te detecteren, verbinding te maken en afspeelopdrachten te sturen. De Ontvanger is een webapplicatie (HTML5 + CSS + JavaScript) die draait in de Chromecast-browser, die inhoud laadt en afspeelt.
Het Google Cast-protocol is gebaseerd op DIAL (Discovery and Launch) voor apparaatdetectie en een eigen protocol via WebSocket voor afspeelcontrole. DIAL gebruikt SSDP (Simple Service Discovery Protocol) om Cast-apparaten in het lokale netwerk te vinden. Na detectie maakt de Afzender een WebSocket-verbinding met de Ontvanger via poort 8008 of 8009 en stuurt opdrachten in JSON-formaat: LOAD, PLAY, PAUSE, STOP, SEEK.
| Component | Platform | Technologie |
|---|---|---|
| Afzender (Sender) | Android / iOS / Chrome | Cast SDK (Java/Kotlin, Swift, JS) |
| Standaard Ontvanger (Default Receiver) | Chromecast / Android TV | Ingebouwd (configuratie via Google Cast Console) |
| Aangepaste Ontvanger (Custom Receiver) | Chromecast / Android TV | Webapplicatie (HTML5, CAF Receiver JS) |
| Protocol | Lokaal Wi-Fi-netwerk | WebSocket + JSON + DIAL/SSDP |
| Mediatransport | Internet | HLS, DASH, MP4 (direct laden door Chromecast) |
Afzender stuurt de Ontvanger niet de inhoud zelf, maar de URL (media URL) en metadata (naam, afbeelding, ondertiteling). De Ontvanger laadt zelfstandig de inhoud van de URL, waardoor de telefoon geen batterij hoeft te verbruiken voor gegevensoverdracht. Nadat het afspelen is begonnen, kan de Afzender pauze-, terugspoel-, volumecommando's sturen en de afspeelstatus ontvangen via Cast Protocol v2.
Cast Application Framework (CAF) — is een vereenvoudigde API van Google voor Cast-integratie in mobiele apps, geïntroduceerd in 2018. CAF vervangt de verouderde Cast SDK (CastCompanionLibrary) en bied kant-en-klare UI-componenten: Cast Button (pictogram voor apparaatdetectie), Mini Controller (mini-speler onderaan het scherm) en Expanded Controller (volledig scherm afstandsbediening). CAF ondersteunt Android, iOS, Flutter en React Native.
Om CAF te gebruiken hoeft de ontwikkelaar geen eigen Ontvanger te schrijven — Google biedt de Standaard Ontvanger (Default Receiver) die automatisch inhoud laadt en afspeelt. De Standaard Ontvanger ondersteunt HLS, DASH, MP4, WebM, MP3, afbeeldingen en ondertiteling. De configuratie van de Ontvanger gebeurt in de Google Cast Console — het volstaat om de URL van de inhoud op te geven en de Standaard Ontvanger zorgt voor de rest. Een Aangepaste Ontvanger is alleen nodig voor niet-standaard scenario's: eigen interface op de televisie, DRM-ondersteuning, afspeelwachtrijen.
// CAF Receiver-opties configureren
val receiverOptions = CastReceiverOptions.Builder(context)
.setReceiverApplicationId(
CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID
)
.build()
// Cast-context verbinden
val castContext = CastContext.getSharedInstance(context)
castContext.setReceiverOptions(receiverOptions)CAF beheert automatisch de levenscyclus van de verbinding: apparaatdetectie via Cast Button, verbinding maken, media laden, pauzeren bij tijdelijk verlies van verbinding en opnieuw verbinden. CAF ondersteunt ook afspeelwachtrijen (media queues) voor afspeellijsten en de „Cast”-knop op het vergrendelscherm en in het meldingencentrum (Android). Minimale versie: Android 5.0 (API 21), iOS 14+.
Google Cast ondersteunt de belangrijkste streamingformaten: HLS (HTTP Live Streaming) van Apple, DASH (Dynamic Adaptive Streaming over HTTP) en progressieve MP4. Chromecast selecteert automatisch de optimale videokwaliteit op basis van de internetsnelheid (adaptieve bitrate). Voor HLS en DASH schakelt Chromecast streams in realtime zonder het afspelen te onderbreken. HLS wordt ondersteund vanaf Chromecast-firmwareversie 1.28+.
Voor streaming via Google Cast moet de inhoud toegankelijk zijn via een openbare URL (HTTP/HTTPS) — Chromecast laadt de inhoud rechtstreeks van de server, niet van de telefoon. DRM (Digital Rights Management) wordt ondersteund via Widevine: Chromecast ondersteunt Widevine L3 (alle apparaten) en L1 (sommige modellen, bijvoorbeeld Chromecast with Google TV). Voor DRM is een Aangepaste Ontvanger met Shaka Player of ExoPlayer-integratie vereist. Volgens Google ondersteunt Chromecast with Google TV 4K HDR met Widevine L1 voor Netflix, Disney+ en andere diensten.
// Media laden naar Chromecast via CAF
val mediaInfo = MediaInfo.Builder(Uri.parse(videoUrl))
.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
.setContentType("video/mp4")
.setMetadata(MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE)
.putString(MediaMetadata.KEY_TITLE, title)
.putString(MediaMetadata.KEY_SUBTITLE, subtitle))
.build()
CastSession.RemoteMediaClient
?.load(mediaInfo, autoPlay = true)Ondertitelingsformaten: Chromecast ondersteunt TTML, WebVTT en CEA-608. Ondertitels worden verzonden als onderdeel van MediaInfo via MediaTrack. Chromecast ondersteunt ook asynchroon laden van afbeeldingen (foto's) met de mogelijkheid om tussen afbeeldingen te vegen via de Cast Queue API. Voor audio ondersteunt Chromecast MP3, AAC, FLAC, WAV en OGG. Audio-streaming via Google Cast wordt ondersteund op Chromecast Audio en Cast-luidsprekers.
Cast Button — het belangrijkste UI-onderdeel van de Google Cast SDK, dat het Cast-pictogram weergeeft en automatisch van status verandert: inactief (geen apparaten), beschikbaar (apparaten gevonden), verbonden (actieve sessie). Wanneer op Cast Button wordt gedrukt, wordt het dialoogvenster voor apparaatselectie geopend. Het onderdeel is beschikbaar via MediaRouteActionProvider (Android) of GCKUICastButton (iOS). Cast Button mag alleen zichtbaar zijn wanneer Cast-apparaten beschikbaar zijn in het netwerk — CAF verbergt de knop automatisch wanneer er geen apparaten zijn.
Mini Controller — het paneel onderaan het scherm dat de naam van de inhoud, de omslag, de play/pause-knoppen en de knop om de sessie te beëindigen weergeeft. Mini Controller verschijnt automatisch wanneer de Cast-sessie actief is en de gebruiker zich op een scherm bevindt dat niet gerelateerd is aan het afspelen. CAF biedt een kant-en-klare MiniControllerFragment voor Android die in de layout wordt ingebed. Standaard bevindt Mini Controller zich onderaan het scherm, maar kan op elke gewenste positie worden geconfigureerd.
// Mini Controller aanpassen via stijlen
// styles.xml
// <style name="CastMiniControllerStyle"
// parent="Theme.GoogleCast">
// <item name="castMiniBackgroundColor">#FF0000</item>
// <item name="castShowImageThumbnail">true</item>
// </style>
// Programmatische bediening van Mini Controller
val miniController = findViewById<MiniControllerFragment>(
R.id.miniController
)
miniController.setVisibility(
isCastSessionActive()
)Expanded Controller — de volledig scherm afstandsbediening voor het afspelen op de televisie, die wordt geopend door op Mini Controller te drukken. Expanded Controller toont: naam, beschrijving, omslag, voortgangsbalk met terugspoelmogelijkheid, play/pause/stop-knoppen, lijst met nummers (als er een wachtrij is), volumeregelaar en ontkoppelknop. CAF biedt een kant-en-klare ExpandedControllerActivity die automatisch start. Als een aangepaste interface nodig is, breid dan de basis ExpandedControllerActivity uit.
Aangepaste Ontvanger (Custom Receiver) — is een webapplicatie (HTML5 + CSS + JavaScript) die op Chromecast wordt geladen bij het starten van een Cast-sessie. In tegenstelling tot de Standaard Ontvanger, maakt de aangepaste ontvanger volledige controle over de weergave van de inhoud op de televisie mogelijk: achtergrondafbeeldingen, animaties, aangepaste bedieningselementen, merklogo. De Aangepaste Ontvanger wordt geregistreerd in de Google Cast Console en krijgt een unieke Application ID.
De ontwikkeling van de Aangepaste Ontvanger gebeurt in JavaScript met behulp van Cast Receiver Framework (CAF Receiver). CAF Receiver biedt een API voor het verwerken van inkomende berichten van de Afzender, het beheren van de mediastream, het verwerken van wachtrijen en DRM-integratie. De Ontvanger werkt in de geïsoleerde browseromgeving van Chromecast (WebKit) met beperkte toegang tot de DOM. Minimale vereisten: HTML5, CSS3, JavaScript ES6. De Ontvanger wordt gehost op een HTTPS-server.
// Basis aangepaste Ontvanger op CAF
const context = cast.framework.CastReceiverContext.getInstance()
const playerManager = context.getPlayerManager()
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
(loadData) => {
// Aangepaste verwerking van het laden van media
console.log("Loading media:", loadData.media.contentId)
return loadData
}
)
context.start()
// Verwerking van aangepaste berichten van Afzender
context.addCustomMessageListener("urn:x-cast:custom", (event) => {
console.log("Custom data:", event.data)
})De Aangepaste Ontvanger moet worden getest op een fysiek apparaat via de Cast Developer Console. Google raadt aan de Standaard Ontvanger te gebruiken voor standaard scenario's en de aangepaste alleen wanneer een eigen interface op de televisie, DRM-ondersteuning (Widevine) of afspeelwachtrijen met eigen logica nodig zijn. Ontvanger heeft geen toegang tot de DOM van de Afzenderpagina en kan geen JavaScript uitvoeren dat door de Afzender is verzonden (beveiliging).
Een volledig voorbeeld van Google Cast-integratie in een Android-app met behulp van CAF. De app speelt video af en maakt het mogelijk om deze naar Chromecast te streamen via Cast Button. De code omvat configuratie van CastOptions, initialisatie van CastContext, verbindingsbeheer en het laden van media naar het Cast-apparaat.
class CastPlayerActivity : AppCompatActivity() {
private lateinit var castContext: CastContext
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setupCast()
setContentView(R.layout.activity_player)
}
private fun setupCast() {
CastOptions.Builder()
.setReceiverApplicationId(
CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID
)
.build()
.let {
castContext = CastContext.getSharedInstance(this)
}
}
fun castVideo(videoUrl: String, title: String) {
val mediaInfo = MediaInfo.Builder(Uri.parse(videoUrl))
.setContentType("video/mp4")
.setStreamType(MediaInfo.STREAM_TYPE_BUFFERED)
.setMetadata(MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE)
.putString(MediaMetadata.KEY_TITLE, title))
.build()
castContext.sessionManager.getCurrentCastSession()
?.remoteMediaClient
?.load(mediaInfo)
}
}Gebruik voor het testen van Google Cast een virtueel Cast-apparaat via Chrome DevTools (Cast-tabblad) of een fysieke Chromecast. Google biedt een test-Application ID — CC1AD845 (Default Media Receiver). Registreer uw app in de Google Cast Console voordat u deze publiceert en verkrijg een productie-Application ID. Cast SDK vereist Google Play Services 21.0.0+ en Android 5.0+.
Het eerste veelvoorkomende probleem — Cast Button wordt niet weergegeven. Oorzaken: apparaten bevinden zich niet in hetzelfde Wi-Fi-netwerk, Chromecast ondersteunt DIAL niet (oude firmware) of Wi-Fi-detectie is uitgeschakeld op de telefoon. Oplossing: controleer of de telefoon en Chromecast zijn verbonden met hetzelfde netwerk (2,4 GHz of 5 GHz). Google Cast werkt niet via gast-Wi-Fi-netwerken, VPN of bedrijfsnetwerken met clientisolatie. Gebruik Cast Connect om te testen zonder fysiek apparaat.
Het tweede probleem — verbinding verbroken tijdens het afspelen. Chromecast kan de Wi-Fi-verbinding verliezen door een zwak signaal, overbelasting van het kanaal of interferentie van een magnetron (2,4 GHz). Oplossing: plaats Chromecast dichter bij de router, gebruik 5 GHz (indien ondersteund), configureer QoS voor Chromecast-verkeer. Verwerk in de app de callback onRemoteMediaPlayerStatusUpdated met de status IDLE en de foutreden — bij verlies van verbinding toon een melding en bied opnieuw verbinden aan.
Het derde probleem — inhoud wordt niet afgespeeld op Chromecast. Controleer: de URL van de inhoud is toegankelijk vanaf internet (Chromecast laadt inhoud rechtstreeks, niet via de telefoon), het formaat wordt ondersteund door Chromecast, er is geen CORS-blokkade (voor .m3u8 en .mpd). Als u de Standaard Ontvanger gebruikt, controleer dan of de Application ID correct is. Voor Aangepaste Ontvanger controleer of de app op HTTPS wordt gehost. Gebruik Cast SDK Logger voor debuggen: CastContext.getSharedInstance().setCastLogger(...).
Veelgestelde vragen
Google Cast gebruikt het „stuur URL”-model — de telefoon stuurt Chromecast een link naar de inhoud die direct wordt geladen. AirPlay (Apple) — een vergelijkbaar protocol voor het Apple-ecosysteem. Miracast — directe schermoverdracht (screen mirroring) die de telefoon belast. Cast verbruikt 80% minder energie van de telefoon en maakt het mogelijk de app te minimaliseren zonder het afspelen te stoppen.
Google Cast werkt niet alleen op Chromecast, maar ook op televisies met ingebouwde Google TV, Android TV en op audiosystemen met Cast-ondersteuning (Nest Audio, Sonos). Voor ontwikkeling en testen kunt u een virtueel Cast-apparaat gebruiken via Chrome DevTools. Voor Cast-integratie in een app is een fysiek apparaat niet vereist — gebruik Cast Connect voor emulatie.
Ja, Chromecast with Google TV (2020) en nieuwere modellen ondersteunen 4K HDR met Dolby Vision, HDR10 en HDR10+. De standaard Chromecast (3e generatie) ondersteunt 1080p 60fps. Chromecast Ultra — 4K HDR. Voor 4K-streaming is een internetsnelheid van minstens 25 Mbps en Widevine L1-ondersteuning voor DRM-inhoud (Netflix, Disney+) vereist.
Roep CastSession.endSession(boolean stopCasting) aan om de sessie te stoppen: geef true door om het afspelen op de televisie te stoppen, of false om alleen de telefoon los te koppelen. U kunt ook de methode stop() op RemoteMediaClient gebruiken. De gebruiker kan de sessie ook stoppen via Cast Button of Mini Controller door op de ontkoppelknop te drukken.
Ja, via aangepaste berichten (custom messages). De Afzender stuurt een bericht via een namespace (bijv. urn:x-cast:custom.namespace) met een willekeurig JSON-object. De Ontvanger verwerkt het bericht via addCustomMessageListener. Aangepaste berichten worden alleen ondersteund met een Aangepaste Ontvanger — de Standaard Ontvanger verwerkt geen aangepaste namespaces. Maximale berichtgrootte — 64 KB.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook