Google Cast — är en teknik från Google för att strömma multimediainnehåll från mobila enheter till tv-apparater och ljudsystem via Cast-protokollet. SDK gör det möjligt för utvecklare att lägga till Chromecast-stöd i applikationer för Android och iOS, genom att överföra video, ljud och bilder till stora skärmar. Enligt Google Cast Developer Documentation, 2025 har över 100 miljoner Chromecast-enheter sålts världen över och Cast SDK används i över 40 000 applikationer.
Huvudpunkter
Google Cast — är ett trådlöst multimediaöverföringsprotokoll utvecklat av Google för strömning från mobila enheter, bärbara datorer och surfplattor till tv-apparater, högtalare och andra skärmar. Till skillnad från AirPlay (Apple) eller Miracast använder Cast modellen "skicka URL" (send-to-device): den mobila applikationen skickar URL:en för innehållet till Chromecast och enheten laddar själv och spelar upp strömmen, utan att belasta telefonen.
Den viktigaste fördelen med Google Cast jämfört med direkt strömning (screen mirroring) — energieffektivitet. När uppspelningen har startat fungerar telefonen endast som en fjärrkontroll: användaren kan minimera applikationen, låsa skärmen eller byta till en annan applikation — videon fortsätter att spelas på tv:n. Enligt uppgifter från Google (2025) förbrukar Cast 80% mindre energi på telefonen jämfört med mirroring-lösningar.
Google Cast stöder inte bara Chromecast, utan även inbyggda Cast-mottagare i tv-apparater från Sony, TCL, Philips, Hisense och andra tillverkare med Google TV eller Android TV. Cast stöds också i ljudsystem (Nest Audio, Sonos med Cast) och Chromecast Audio. Cast-protokollet fungerar via Wi-Fi (2,4/5 GHz) och kräver att den sändande enheten och mottagaren befinner sig i samma nätverk.
Google Cast-arkitekturen består av tre komponenter: Avsändare (mobil applikation), Mottagare (applikation på Chromecast/tv:n) och transportprotokoll. Avsändaren använder Cast SDK för att upptäcka enheter i nätverket, upprätta anslutning och skicka uppspelningskommandon. Mottagaren är en webbapplikation (HTML5 + CSS + JavaScript) som körs i Chromecast-webbläsaren, som laddar och spelar upp innehåll.
Google Cast-protokollet är baserat på DIAL (Discovery and Launch) för enhetsdetektering och ett eget protokoll via WebSocket för uppspelningskontroll. DIAL använder SSDP (Simple Service Discovery Protocol) för att söka efter Cast-enheter i det lokala nätverket. Efter detektering upprättar Avsändaren en WebSocket-anslutning med Mottagaren via port 8008 eller 8009 och skickar kommandon i JSON-format: LOAD, PLAY, PAUSE, STOP, SEEK.
| Komponent | Plattform | Teknik |
|---|---|---|
| Avsändare (Sender) | Android / iOS / Chrome | Cast SDK (Java/Kotlin, Swift, JS) |
| Standard Mottagare (Default Receiver) | Chromecast / Android TV | Inbyggd (konfiguration via Google Cast Console) |
| Anpassad Mottagare (Custom Receiver) | Chromecast / Android TV | Webbapplikation (HTML5, CAF Receiver JS) |
| Protokoll | Lokalt Wi-Fi-nätverk | WebSocket + JSON + DIAL/SSDP |
| Medietransport | Internet | HLS, DASH, MP4 (direkt laddning av Chromecast) |
Avsändaren skickar till Mottagaren inte själva innehållet, utan URL:en (media URL) och metadata (namn, bild, undertexter). Mottagaren laddar självständigt innehållet från URL:en, vilket gör att telefonen inte behöver förbruka batteri på dataöverföring. När uppspelningen har startat kan Avsändaren skicka kommandon för paus, spola tillbaka, volymjustering och ta emot uppspelningsstatus via Cast Protocol v2.
Cast Application Framework (CAF) — är ett förenklat API från Google för Cast-integration i mobila applikationer, som introducerades 2018. CAF ersätter den gamla Cast SDK (CastCompanionLibrary) och tillhandahåller färdiga UI-komponenter: Cast Button (ikon för enhetsdetektering), Mini Controller (minispelare längst ner på skärmen) och Expanded Controller (fjärrkontroll på helskärm). CAF stöder Android, iOS, Flutter och React Native.
För att använda CAF behöver utvecklaren inte skriva en egen Mottagare — Google tillhandahåller Standard Mottagare (Default Receiver) som automatiskt laddar och spelar upp innehåll. Standard Mottagare stöder HLS, DASH, MP4, WebM, MP3, bilder och undertexter. Konfiguration av Mottagaren görs i Google Cast Console — det räcker att ange URL:en för innehållet och Standard Mottagare sköter resten. Anpassad Mottagare krävs endast för icke-standardiserade scenarier: eget gränssnitt på tv:n, DRM-stöd, uppspelningsköer.
// Konfigurera CAF Receiver-alternativ
val receiverOptions = CastReceiverOptions.Builder(context)
.setReceiverApplicationId(
CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID
)
.build()
// Ansluta Cast-kontext
val castContext = CastContext.getSharedInstance(context)
castContext.setReceiverOptions(receiverOptions)CAF hanterar automatiskt anslutningens livscykel: enhetsdetektering via Cast Button, upprättande av anslutning, laddning av media, paus vid tillfällig anslutningsförlust och återanslutning. CAF stöder även uppspelningsköer (media queues) för spellistor och "Cast"-knappen på låsskärmen och i notifikationscentret (Android). Minimiversion: Android 5.0 (API 21), iOS 14+.
Google Cast stöder de viktigaste strömningsformaten: HLS (HTTP Live Streaming) från Apple, DASH (Dynamic Adaptive Streaming over HTTP) och progressiv MP4. Chromecast väljer automatiskt den optimala videokvaliteten baserat på internetanslutningens hastighet (adaptiv bitrate). För HLS och DASH växlar Chromecast strömmar i realtid utan att stoppa uppspelningen. HLS stöds från Chromecast firmware version 1.28+.
För strömning via Google Cast måste innehållet vara tillgängligt via en publik URL (HTTP/HTTPS) — Chromecast laddar innehåll direkt från servern, inte från telefonen. DRM (Digital Rights Management) stöds via Widevine: Chromecast stöder Widevine L3 (alla enheter) och L1 (vissa modeller, t.ex. Chromecast with Google TV). För arbete med DRM krävs en Anpassad Mottagare med integration av Shaka Player eller ExoPlayer. Enligt Google stöder Chromecast with Google TV 4K HDR med Widevine L1 för Netflix, Disney+ och andra tjänster.
// Ladda media till 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)Undertextformat: Chromecast stöder TTML, WebVTT och CEA-608. Undertexter skickas som en del av MediaInfo via MediaTrack. Chromecast stöder även asynkron laddning av bilder (foton) med möjlighet att svepa mellan bilder via Cast Queue API. För ljud stöder Chromecast MP3, AAC, FLAC, WAV och OGG. Ljudströmning via Google Cast stöds på Chromecast Audio och Cast-högtalare.
Cast Button — den viktigaste UI-komponenten i Google Cast SDK, som visar Cast-ikonen och automatiskt ändrar status: inaktiv (inga enheter), tillgänglig (enheter hittade), ansluten (aktiv session). När Cast Button trycks in öppnas dialogrutan för enhetsval. Komponenten är tillgänglig via MediaRouteActionProvider (Android) eller GCKUICastButton (iOS). Cast Button bör endast vara synlig när Cast-enheter är tillgängliga i nätverket — CAF döljer automatiskt knappen när det inte finns några enheter.
Mini Controller — panelen längst ner på skärmen som visar innehållets namn, omslag, play/pause-knappar och knappen för att stänga sessionen. Mini Controller visas automatiskt när Cast-sessionen är aktiv och användaren befinner sig på en skärm som inte är relaterad till uppspelning. CAF tillhandahåller en färdig MiniControllerFragment för Android som bäddas in i layouten. Som standard finns Mini Controller längst ner på skärmen, men kan konfigureras till valfri position.
// Anpassa Mini Controller med stilar
// styles.xml
// <style name="CastMiniControllerStyle"
// parent="Theme.GoogleCast">
// <item name="castMiniBackgroundColor">#FF0000</item>
// <item name="castShowImageThumbnail">true</item>
// </style>
// Programmatisk styrning av Mini Controller
val miniController = findViewById<MiniControllerFragment>(
R.id.miniController
)
miniController.setVisibility(
isCastSessionActive()
)Expanded Controller — fjärrkontroll på helskärm för att styra uppspelningen på tv:n, som öppnas när Mini Controller trycks in. Expanded Controller visar: namn, beskrivning, omslag, förloppsindikator med möjlighet att spola tillbaka, play/pause/stop-knappar, spellista (om det finns en kö), volymreglage och frånkopplingsknapp. CAF tillhandahåller en färdig ExpandedControllerActivity som startar automatiskt. Om ett anpassat gränssnitt behövs — utöka den grundläggande ExpandedControllerActivity.
Anpassad Mottagare (Custom Receiver) — är en webbapplikation (HTML5 + CSS + JavaScript) som laddas på Chromecast vid start av en Cast-session. Till skillnad från Standard Mottagare möjliggör den anpassade mottagaren fullständig kontroll över utseendet på innehållet på tv:n: bakgrundsbilder, animationer, anpassade kontroller, varumärkeslogotyp. Den Anpassade Mottagaren registreras i Google Cast Console och får ett unikt Application ID.
Utveckling av den Anpassade Mottagaren sker i JavaScript med hjälp av Cast Receiver Framework (CAF Receiver). CAF Receiver tillhandahåller API för bearbetning av inkommande meddelanden från Avsändaren, hantering av mediaströmmen, bearbetning av köer och DRM-integration. Mottagaren fungerar i Chromecastens isolerade webbläsarmiljö (WebKit) med begränsad åtkomst till DOM. Minimikrav: HTML5, CSS3, JavaScript ES6. Mottagaren hostas på en HTTPS-server.
// Grundläggande anpassad Mottagare på CAF
const context = cast.framework.CastReceiverContext.getInstance()
const playerManager = context.getPlayerManager()
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
(loadData) => {
// Anpassad bearbetning av medialaddning
console.log("Loading media:", loadData.media.contentId)
return loadData
}
)
context.start()
// Hantering av anpassade meddelanden från Avsändare
context.addCustomMessageListener("urn:x-cast:custom", (event) => {
console.log("Custom data:", event.data)
})Den Anpassade Mottagaren måste testas på en verklig enhet via Cast Developer Console. Google rekommenderar att använda Standard Mottagare för standardscenarier och den anpassade endast när ett eget gränssnitt på tv:n, DRM-stöd (Widevine) eller uppspelningsköer med egen logik behövs. Mottagare har inte tillgång till DOM på Avsändarens sida och kan inte köra JavaScript som skickats av Avsändaren (säkerhet).
Fullständigt exempel på Google Cast-integration i en Android-applikation med CAF. Applikationen spelar upp video och möjliggör strömning till Chromecast via Cast Button. Koden inkluderar konfiguration av CastOptions, initiering av CastContext, anslutningshantering och laddning av media till Cast-enheten.
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)
}
}För att testa Google Cast, använd en virtuell Cast-enhet via Chrome DevTools (Cast-fliken) eller en fysisk Chromecast. Google tillhandahåller ett test-Application ID — CC1AD845 (Default Media Receiver). Fre publicering, registrera din applikation i Google Cast Console och skaffa ett produktions-Application ID. Cast SDK kräver Google Play Services 21.0.0+ och Android 5.0+.
Det första vanliga problemet — Cast Button visas inte. Orsaker: enheterna är inte i samma Wi-Fi-nätverk, Chromecast stöder inte DIAL (gammal firmware) eller Wi-Fi-detektering är avstängd på telefonen. Lösning: kontrollera att telefonen och Chromecast är anslutna till samma nätverk (2,4 GHz eller 5 GHz). Google Cast fungerar inte via gäst-Wi-Fi-nätverk, VPN eller företagsnätverk med klientisolering. Använd Cast Connect för testning utan fysisk enhet.
Det andra problemet — anslutningen bryts under uppspelning. Chromecast kan förlora Wi-Fi-anslutningen på grund av svag signal, överbelastning av kanalen eller störningar från mikrovågsugn (2,4 GHz). Lösning: placera Chromecast närmare routern, använd 5 GHz (om det stöds), konfigurera QoS för Chromecast-trafik. I applikationen, hantera callback onRemoteMediaPlayerStatusUpdated med status IDLE och felorsak — vid anslutningsförlust, visa ett meddelande och erbjud återanslutning.
Det tredje problemet — innehållet spelas inte upp på Chromecast. Kontrollera: URL:en för innehållet är tillgänglig från internet (Chromecast laddar innehåll direkt, inte via telefonen), formatet stöds av Chromecast, det finns ingen CORS-blockering (för .m3u8 och .mpd). Om du använder Standard Mottagare, se till att Application ID är korrekt. För Anpassad Mottagare, kontrollera att applikationen är hostad på HTTPS. Använd Cast SDK Logger för felsökning: CastContext.getSharedInstance().setCastLogger(...).
Vanliga frågor
Google Cast använder modellen "skicka URL" — telefonen skickar en länk till innehållet till Chromecast som laddas direkt. AirPlay (Apple) — ett liknande protokoll för Apple-ekosystemet. Miracast — direkt skärmöverföring (screen mirroring) som belastar telefonen. Cast förbrukar 80% mindre telefonenergi och gör det möjligt att minimera applikationen utan att stoppa uppspelningen.
Google Cast fungerar inte bara på Chromecast, utan även på tv-apparater med inbyggd Google TV, Android TV samt på ljudsystem med Cast-stöd (Nest Audio, Sonos). För utveckling och testning kan du använda en virtuell Cast-enhet via Chrome DevTools. För Cast-integration i en applikation krävs ingen fysisk enhet — använd Cast Connect för emulering.
Ja, Chromecast with Google TV (2020) och nyare modeller stöder 4K HDR med Dolby Vision, HDR10 och HDR10+. Standard Chromecast (3:e generationen) stöder 1080p 60fps. Chromecast Ultra — 4K HDR. För 4K-strömning krävs en internethastighet på minst 25 Mbps och Widevine L1-stöd för DRM-innehåll (Netflix, Disney+).
För att stoppa sessionen, anropa CastSession.endSession(boolean stopCasting) med parametern true om du vill stoppa uppspelningen på tv:n, eller false om du bara vill koppla bort telefonen. Du kan också använda metoden stop() på RemoteMediaClient. Användaren kan också stoppa sessionen via Cast Button eller Mini Controller genom att trycka på frånkopplingsknappen.
Ja, via anpassade meddelanden (custom messages). Avsändaren skickar ett meddelande via en namespace (t.ex. urn:x-cast:custom.namespace) med ett godtyckligt JSON-objekt. Mottagaren bearbetar meddelandet via addCustomMessageListener. Anpassade meddelanden stöds endast med en Anpassad Mottagare — Standard Mottagare bearbetar inte anpassade namespace. Maximal meddelandestorlek — 64 KB.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också