Google Cast, Cast protokolü aracılığıyla mobil cihazlardan TV'lere ve ses sistemlerine multimedya içeriği akışı yapmak için Google'ın bir teknolojisidir. SDK, geliştiricilerin Android ve iOS uygulamalarına Chromecast desteği eklemesine, video, ses ve görüntüleri büyük ekranlara göndermesine olanak tanır. Google Cast Developer Documentation, 2025'ye göre, dünya çapında 100 milyondan fazla Chromecast cihazı satılmıştır ve Cast SDK, 40.000'den fazla uygulamada kullanılmaktadır.
Anahtar Noktalar
Google Cast, Google tarafından geliştirilen, mobil cihazlardan, dizüstü bilgisayarlardan ve tabletlerden TV'lere, hoparlörlere ve diğer ekranlara akış yapmak için kablosuz bir multimedya içerik iletim protokolüdür. AirPlay (Apple) veya Miracast'ın aksine Cast, "URL gönder" modelini (send-to-device) kullanır: mobil uygulama Chromecast'e bir içerik URL'si gönderir ve cihaz, telefonu yormadan akışı kendisi yükler ve oynatır.
Google Cast'in doğrudan akışa (ekran yansıtma) göre en önemli avantajı enerji verimliliğidir. Oynatma başladıktan sonra telefon yalnızca bir uzaktan kumanda görevi görür: kullanıcı uygulamayı küçültebilir, ekranı kilitleyebilir veya başka bir uygulamaya geçebilir — video TV'de oynamaya devam eder. Google (2025)'e göre Cast, yansıtma çözümlerine kıyasla telefonda %80 daha az güç tüketir.
Google Cast yalnızca Chromecast'i değil, aynı zamanda Google TV veya Android TV'li Sony, TCL, Philips, Hisense ve diğer üreticilerin TV'lerinde yerleşik Cast alıcılarını da destekler. Cast ayrıca ses sistemlerinde (Nest Audio, Cast destekli Sonos) ve Chromecast Audio'da da desteklenir. Cast protokolü Wi-Fi (2.4/5 GHz) üzerinden çalışır ve gönderici ile alıcının aynı ağda olmasını gerektirir.
Google Cast mimarisi üç bileşenden oluşur: Sender (mobil uygulama), Receiver (Chromecast/TV'deki uygulama) ve taşıma protokolü. Sender, ağdaki cihazları keşfetmek, bağlantı kurmak ve oynatma komutları göndermek için Cast SDK'yı kullanır. Receiver, Chromecast tarayıcısında çalışan ve içeriği yükleyip oynatan bir web uygulamasıdır (HTML5 + CSS + JavaScript).
Google Cast protokolü, cihaz keşfi için DIAL (Discovery and Launch) ve oynatma kontrolü için WebSocket üzerinde özel bir protokole dayanır. DIAL, yerel ağdaki Cast cihazlarını bulmak için SSDP'yi (Simple Service Discovery Protocol) kullanır. Keşfin ardından Sender, 8008 veya 8009 portunda Receiver ile bir WebSocket bağlantısı kurar ve JSON formatında komutlar gönderir: LOAD, PLAY, PAUSE, STOP, SEEK.
| Bileşen | Platform | Teknoloji |
|---|---|---|
| Sender | Android / iOS / Chrome | Cast SDK (Java/Kotlin, Swift, JS) |
| Default Receiver | Chromecast / Android TV | Yerleşik (Google Cast Console üzerinden yapılandırılır) |
| Custom Receiver | Chromecast / Android TV | Web uygulaması (HTML5, CAF Receiver JS) |
| Protokol | Yerel Wi-Fi ağı | WebSocket + JSON + DIAL/SSDP |
| Medya Taşıma | Internet | HLS, DASH, MP4 (doğrudan Chromecast yükleme) |
Sender, Receiver'a içeriğin kendisini değil, bir URL (medya URL'si) ve meta verileri (başlık, görsel, altyazılar) gönderir. Receiver, URL'den bağımsız olarak içeriği yükler, bu da veri iletimi için telefonun pilinden tasarruf sağlar. Oynatma başladıktan sonra Sender, Cast Protocol v2 aracılığıyla duraklatma, geri sarma, ses kontrol komutları gönderebilir ve oynatma durumunu alabilir.
Cast Application Framework (CAF), 2018'de tanıtılan, mobil uygulamalara Cast'i entegre etmek için Google'ın basitleştirilmiş bir API'sidir. CAF, eski Cast SDK'yı (CastCompanionLibrary) değiştirir ve kullanıma hazır UI bileşenleri sağlar: Cast Button (cihaz keşif simgesi), Mini Controller (ekranın altındaki mini oynatıcı) ve Expanded Controller (tam ekran uzaktan kumanda). CAF; Android, iOS, Flutter ve React Native'i destekler.
CAF'i kullanmak için geliştiricinin kendi Receiver'ını yazması gerekmez — Google, içeriği otomatik olarak yükleyip oynatan bir Default Receiver sağlar. Default Receiver; HLS, DASH, MP4, WebM, MP3, görseller ve altyazıları destekler. Receiver yapılandırması Google Cast Console'da yapılır — yalnızca içerik URL'sini belirtin, Default Receiver gerisini halleder. Özel bir Receiver yalnızca standart olmayan senaryolar için gereklidir: özel TV arayüzü, DRM desteği, oynatma kuyrukları.
// CAF Receiver Seçeneklerini Yapılandırma
val receiverOptions = CastReceiverOptions.Builder(context)
.setReceiverApplicationId(
CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID
)
.build()
// Cast Context Bağlama
val castContext = CastContext.getSharedInstance(context)
castContext.setReceiverOptions(receiverOptions)CAF, bağlantı yaşam döngüsünü otomatik olarak yönetir: Cast Button aracılığıyla cihaz keşfi, bağlantı kurma, medya yükleme, geçici bağlantı kaybında duraklama ve yeniden bağlanma. CAF ayrıca çalma listeleri için oynatma kuyruklarını (medya kuyrukları) ve Kilit Ekranı ile Bildirim Merkezi'nde (Android) Cast düğmesini destekler. Minimum sürüm: Android 5.0 (API 21), iOS 14+.
Google Cast temel akış formatlarını destekler: Apple'dan HLS (HTTP Live Streaming), DASH (Dynamic Adaptive Streaming over HTTP) ve aşamalı MP4. Chromecast, internet bağlantı hızına (uyarlanabilir bit hızı) göre otomatik olarak en uygun video kalitesini seçer. HLS ve DASH için Chromecast, oynatmayı durdurmadan gerçek zamanlı olarak akışları değiştirir. HLS, Chromecast ürün yazılımı sürümü 1.28+'dan itibaren desteklenir.
Google Cast üzerinden akış için içerik herkese açık bir URL'den (HTTP/HTTPS) erişilebilir olmalıdır — Chromecast içeriği telefondan değil, doğrudan sunucudan yükler. DRM (Dijital Hak Yönetimi), Widevine aracılığıyla desteklenir: Chromecast, Widevine L3 (tüm cihazlar) ve L1'i (bazı modeller, örn. Chromecast with Google TV) destekler. DRM ile çalışmak, Shaka Player veya ExoPlayer entegrasyonlu özel bir Receiver gerektirir. Google'a göre Chromecast with Google TV, Netflix, Disney+ ve diğer hizmetler için Widevine L1 ile 4K HDR'yi destekler.
// CAF Aracılığıyla Chromecast'e Medya Yükleme
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)Altyazı formatları: Chromecast, TTML, WebVTT ve CEA-608'i destekler. Altyazılar, MediaTrack aracılığıyla MediaInfo'nun bir parçası olarak iletilir. Chromecast ayrıca Cast Queue API aracılığıyla görseller arasında kaydırma özelliğiyle eşzamansız görsel yüklemeyi (fotoğraflar) destekler. Ses için Chromecast, MP3, AAC, FLAC, WAV ve OGG'yi destekler. Google Cast üzerinden ses akışı, Chromecast Audio ve Cast hoparlörlerinde desteklenir.
Cast Button, Google Cast SDK'nın Cast simgesini görüntüleyen ve otomatik olarak durum değiştiren anahtar bir UI bileşenidir: etkin değil (cihaz yok), kullanılabilir (cihazlar bulundu), bağlı (etkin oturum). Tıklandığında Cast Button bir cihaz seçim iletişim kutusu açar. Bileşen, MediaRouteActionProvider (Android) veya GCKUICastButton (iOS) aracılığıyla kullanılabilir. Cast Button yalnızca ağda Cast cihazları kullanılabilir olduğunda görünür olmalıdır — CAF, cihaz bulunamazsa düğmeyi otomatik olarak gizler.
Mini Controller, ekranın altında içerik başlığını, kapak görselini, oynat/duraklat düğmelerini ve oturum kapatma düğmesini gösteren bir paneldir. Mini Controller, bir Cast oturumu etkin olduğunda ve kullanıcı oynatmayla ilgili olmayan bir ekrandayken otomatik olarak görünür. CAF, Android için düzene gömülen hazır bir MiniControllerFragment sağlar. Varsayılan olarak Mini Controller ekranın altında bulunur ancak herhangi bir konuma yerleştirilebilir.
// Mini Controller'ı Stillerle Özelleştirme
// styles.xml
// <style name="CastMiniControllerStyle"
// parent="Theme.GoogleCast">
// <item name="castMiniBackgroundColor">#FF0000</item>
// <item name="castShowImageThumbnail">true</item>
// </style>
// Mini Controller'ın Programlı Kontrolü
val miniController = findViewById<MiniControllerFragment>(
R.id.miniController
)
miniController.setVisibility(
isCastSessionActive()
)Expanded Controller, Mini Controller'a tıklanarak açılan, TV'de tam ekran oynatma kontrolüdür. Expanded Controller şunları gösterir: başlık, açıklama, kapak görseli, arama özellikli ilerleme çubuğu, oynat/duraklat/durdur düğmeleri, parça listesi (sırada varsa), ses kontrolü ve bağlantıyı kesme düğmesi. CAF, otomatik olarak başlatılan hazır bir ExpandedControllerActivity sağlar. Özel bir arayüz gerekiyorsa, temel ExpandedControllerActivity'yi genişletin.
Özel Receiver, bir Cast oturumu başladığında Chromecast'e yüklenen bir web uygulamasıdır (HTML5 + CSS + JavaScript). Default Receiver'ın aksine, özel bir Receiver, TV'de içeriğin görünümü üzerinde tam kontrol sağlar: arka plan görselleri, animasyonlar, özel kontroller, marka logosu. Özel Receiver, Google Cast Console'da kaydedilir ve benzersiz bir Uygulama Kimliği alır.
Özel Receiver geliştirmesi, Cast Receiver Framework (CAF Receiver) kullanılarak JavaScript ile yapılır. CAF Receiver, Sender'dan gelen mesajları işlemek, medya akışını yönetmek, kuyrukları işlemek ve DRM ile entegre olmak için bir API sağlar. Receiver, Chromecast'te (WebKit) sınırlı DOM erişimiyle izole bir tarayıcı ortamında çalışır. Minimum gereksinimler: HTML5, CSS3, JavaScript ES6. Receiver, bir HTTPS sunucusunda barındırılır.
// CAF'ta Temel Özel Receiver
const context = cast.framework.CastReceiverContext.getInstance()
const playerManager = context.getPlayerManager()
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
(loadData) => {
// Özel Medya Yükleme İşleme
console.log("Loading media:", loadData.media.contentId)
return loadData
}
)
context.start()
// Sender'dan Özel Mesajları İşleme
context.addCustomMessageListener("urn:x-cast:custom", (event) => {
console.log("Custom data:", event.data)
})Özel bir Receiver, Cast Developer Console aracılığıyla gerçek bir cihazda test edilmelidir. Google, standart senaryolar için Default Receiver kullanılmasını ve yalnızca özel TV arayüzü, DRM desteği (Widevine) veya özel mantıklı oynatma kuyrukları gerektiğinde özel Receiver kullanılmasını önerir. Receiver, Sender sayfasının DOM'una erişeme z ve Sender'dan gönderilen JavaScript'i çalıştıramaz (güvenlik).
CAF kullanarak bir Android uygulamasına Google Cast entegrasyonunun tam bir örneği. Uygulama video oynatır ve Cast Button aracılığıyla Chromecast'e akış yapmaya olanak tanır. Kod, CastOptions yapılandırmasını, CastContext başlatmasını, bağlantı yönetimini ve Cast cihazına medya yüklemeyi içerir.
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)
}
}Google Cast'i test etmek için Chrome DevTools (Cast sekmesi) veya fiziksel bir Chromecast aracılığıyla sanal bir Cast cihazı kullanın. Google, bir test Uygulama Kimliği sağlar — CC1AD845 (Default Media Receiver). Yayınlamadan önce uygulamanızı Google Cast Console'da kaydedin ve bir Üretim Uygulama Kimliği alın. Cast SDK, Google Play Services 21.0.0+ ve Android 5.0+ gerektirir.
İlk yaygın sorun — Cast Button görünmüyor. Nedenleri: cihazlar aynı Wi-Fi ağında değil, Chromecast DIAL'i desteklemiyor (eski ürün yazılımı) veya telefonda Wi-Fi keşfi devre dışı bırakılmış. Çözüm: telefon ve Chromecast'in aynı ağa (2.4 GHz veya 5 GHz) bağlı olduğunu kontrol edin. Google Cast, misafir Wi-Fi ağlarında, VPN'lerde veya istemci izolasyonlu kurumsal ağlarda çalışmaz. Fiziksel cihaz olmadan test etmek için Cast Connect'i kullanın.
İkinci sorun — oynatma sırasında bağlantı kopuyor. Chromecast, zayıf sinyal, kanal tıkanıklığı veya mikrodalga fırından (2.4 GHz) kaynaklanan parazit nedeniyle Wi-Fi bağlantısını kaybedebilir. Çözüm: Chromecast'i yönlendiriciye yaklaştırın, 5 GHz (destekleniyorsa) kullanın, Chromecast trafiği için QoS yapılandırın. Uygulamada, IDLE durumu ve hata nedeniyle onRemoteMediaPlayerStatusUpdated geri çağırmasını işleyin — bağlantı kaybında bir bildirim gösterin ve yeniden bağlanmayı önerin.
Üçüncü sorun — içerik Chromecast'te oynatılmıyor.Şunları kontrol edin: içerik URL'sine internetten erişilebiliyor (Chromecast içeriği telefondan değil, doğrudan yükler), format Chromecast tarafından destekleniyor ve CORS engellemesi yok (.m3u8 ve .mpd için). Default Receiver kullanıyorsanız Uygulama Kimliği'nin doğru olduğundan emin olun. Özel bir Receiver için uygulamanın HTTPS'te barındırıldığını kontrol edin. Hata ayıklama için Cast SDK Logger'ı kullanın: CastContext.getSharedInstance().setCastLogger(...).
Sıkça Sorulan Sorular
Google Cast "URL gönder" modelini kullanır — telefon Chromecast'e doğrudan yüklenen bir içerik bağlantısı gönderir. AirPlay (Apple), Apple ekosistemi için benzer bir protokoldür. Miracast, telefonu yoran doğrudan ekran yansıtmasıdır. Cast, telefon pilinin %80 daha az tüketir ve oynatmayı durdurmadan uygulamayı küçültmeye olanak tanır.
Google Cast yalnızca Chromecast'te değil, aynı zamanda yerleşik Google TV, Android TV'li TV'lerde ve Cast destekli ses sistemlerinde (Nest Audio, Sonos) çalışır. Geliştirme ve test için Chrome DevTools aracılığıyla sanal bir Cast cihazı kullanabilirsiniz. Bir uygulamada Cast entegrasyonu için fiziksel bir cihaz gerekli değildir — öykünme için Cast Connect'i kullanın.
Evet, Chromecast with Google TV (2020) ve daha yeni modeller, Dolby Vision, HDR10 ve HDR10+ ile 4K HDR'yi destekler. Standart Chromecast (3. nesil) 1080p 60fps'yi destekler. Chromecast Ultra — 4K HDR. 4K akış için en az 25 Mbps internet hızı ve DRM içeriği (Netflix, Disney+) için Widevine L1 desteği gerekir.
Bir oturumu durdurmak için, TV'de oynatmayı durdurmanız gerekiyorsa true veya yalnızca telefonun bağlantısını kesmek istiyorsanız false ile CastSession.endSession(boolean stopCasting) çağrısını yapın. Ayrıca RemoteMediaClient üzerinde stop() yöntemini de kullanabilirsiniz. Kullanıcı ayrıca Cast Button veya Mini Controller aracılığıyla bağlantıyı kesme düğmesine basarak oturumu durdurabilir.
Evet, özel mesajlar (custom messages) aracılığıyla. Sender, bir ad alanı (örn. urn:x-cast:custom.namespace) aracılığıyla rastgele bir JSON nesnesi içeren bir mesaj gönderir. Receiver, mesajı addCustomMessageListener aracılığıyla işler. Özel mesajlar yalnızca özel bir Receiver ile desteklenir — Default Receiver, özel ad alanlarını işlemez. Maksimum mesaj boyutu 64 KB'dir.
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun