Google Cast — је технологија компаније Google за стриминг мултимедијалног садржаја са мобилних уређаја на телевизоре и аудио системе преко Cast протокола. SDK омогућава програмерима да додају подршку за Chromecast у апликације за Android и iOS, преносећи видео, аудио и слике на велике екране. Према Google Cast Developer Documentation, 2025, продато је преко 100 милиона Chromecast уређаја широм света, а Cast SDK се користи у преко 40.000 апликација.
Главно
Google Cast — је протокол за бежични пренос мултимедијалног садржаја, који је развио Google за стриминг са мобилних уређаја, лаптопова и таблета на телевизоре, звучнике и друге екране. За разлику од AirPlay (Apple) или Miracast-а, Cast користи модел „пошаљи URL” (send-to-device): мобилна апликација шаље Chromecast-у URL садржаја, а уређај сам учитава и репродукује ток, не оптерећујући телефон.
Кључна предност Google Cast-а у односу на директни стриминг (screen mirroring) — енергетска ефикасност. Након почетка репродукције, телефон делује само као даљински управљач: корисник може да минимизира апликацију, закључа екран или пређе у другу апликацију — видео наставља да се репродукује на телевизору. Према подацима Google-а (2025), Cast троши 80% мање енергије на телефону у поређењу са mirroring решењима.
Google Cast подржава не само Chromecast, већ и уграђене Cast пријемнике у телевизорима Sony, TCL, Philips, Hisense и других произвођача са Google TV или Android TV. Cast је такође подржан у аудио системима (Nest Audio, Sonos са Cast-ом) и Chromecast Audio-у. Cast протокол ради преко Wi-Fi (2,4/5 GHz) и захтева да се уређај пошиљалац и пријемник налазе у истој мрежи.
Архитектура Google Cast-а се састоји од три компоненте: Пошиљаоца (мобилна апликација), Пријемника (апликација на Chromecast-у/телевизору) и транспортног протокола. Пошиљалац користи Cast SDK за откривање уређаја у мрежи, успостављање везе и слање команди за репродукцију. Пријемник је веб апликација (HTML5 + CSS + JavaScript) која ради у прегледачу Chromecast-а, учитава и репродукује садржај.
Google Cast протокол се заснива на DIAL (Discovery and Launch) за откривање уређаја и власничком протоколу преко WebSocket-а за контролу репродукције. DIAL користи SSDP (Simple Service Discovery Protocol) за претрагу Cast уређаја у локалној мрежи. Након откривања, Пошиљалац успоставља WebSocket везу са Пријемником преко porta 8008 или 8009 и шаље команде у JSON формату: LOAD, PLAY, PAUSE, STOP, SEEK.
| Компонента | Платформа | Технологија |
|---|---|---|
| Пошиљалац (Sender) | Android / iOS / Chrome | Cast SDK (Java/Kotlin, Swift, JS) |
| Подразумевани Пријемник (Default Receiver) | Chromecast / Android TV | Уграђени (подешавање преко Google Cast Console) |
| Прилагођени Пријемник (Custom Receiver) | Chromecast / Android TV | Веб апликација (HTML5, CAF Receiver JS) |
| Протокол | Локална Wi-Fi мрежа | WebSocket + JSON + DIAL/SSDP |
| Медија транспорт | Интернет | HLS, DASH, MP4 (директно учитавање Chromecast-а) |
Пошиљалац шаље Пријемнику не сам садржај, већ URL (media URL) и метаподатке (назив, слика, титлови). Пријемник самостално учитава садржај са URL-а, што омогућава телефону да не троши батерију на пренос података. Након почетка репродукције, Пошиљалац може да шаље команде за паузу, премотавање, подешавање јачине звука и да прима статус репродукције преко Cast Protocol v2.
Cast Application Framework (CAF) — је поједностављени API од Google-а за интеграцију Cast-а у мобилне апликације, представљен 2018. године. CAF замењује застарели Cast SDK (CastCompanionLibrary) и пружа готове UI компоненте: Cast Button (иконица за откривање уређаја), Mini Controller (мини плејер на дну екрана) и Expanded Controller (даљински управљач преко целог екрана). CAF подржава Android, iOS, Flutter и React Native.
За коришћење CAF-а, програмер не мора да пише сопствени Пријемник — Google пружа Подразумевани Пријемник (Default Receiver) који аутоматски учитава и репродукује садржај. Подразумевани Пријемник подржава HLS, DASH, MP4, WebM, MP3, слике и титлове. Подешавање Пријемника се врши у Google Cast Console — довољно је навести URL садржаја, а Подразумевани Пријемник ће се побринути за остало. Прилагођени Пријемник је потребан само за нестандардне сценарије: сопствени интерфејс на телевизору, подршка за DRM, редови за репродукцију.
// Подешавање CAF Receiver опција
val receiverOptions = CastReceiverOptions.Builder(context)
.setReceiverApplicationId(
CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID
)
.build()
// Повезивање Cast контекста
val castContext = CastContext.getSharedInstance(context)
castContext.setReceiverOptions(receiverOptions)CAF аутоматски управља животним циклусом везе: откривање уређаја преко Cast Button-а, успостављање везе, учитавање медија, пауза при привременом губитку везе и поновно повезивање. CAF такође подржава редове за репродукцију (media queues) за плејлисте и дугме „Cast” на закључаном екрану и у центру за обавештења (Android). Минимална верзија: Android 5.0 (API 21), iOS 14+.
Google Cast подржава главне формате стриминга: HLS (HTTP Live Streaming) од Apple-а, DASH (Dynamic Adaptive Streaming over HTTP) и прогресивни MP4. Chromecast аутоматски бира оптималан квалитет видеа на основу брзине интернет везе (адаптивни битрејт). За HLS и DASH, Chromecast пребацује токове у реалном времену без заустављања репродукције. HLS је подржан од верзије фирмвера Chromecast 1.28+.
За стриминг преко Google Cast-а, садржај мора бити доступан на јавном URL-у (HTTP/HTTPS) — Chromecast учитава садржај директно са сервера, а не са телефона. DRM (Digital Rights Management) је подржан преко Widevine-а: Chromecast подржава Widevine L3 (сви уређаји) и L1 (неки модели, нпр. Chromecast with Google TV). За рад са DRM-ом потребан је прилагођени Пријемник са интеграцијом Shaka Player-а или ExoPlayer-а. Према Google-у, Chromecast with Google TV подржава 4K HDR са Widevine L1 за Netflix, Disney+ и друге услуге.
// Учитавање медија на Chromecast преко 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)Формати титлова: Chromecast подржава TTML, WebVTT и CEA-608. Титлови се преносе као део MediaInfo-а преко MediaTrack-а. Chromecast такође подржава асинхроно учитавање слика (фотографија) са могућношћу превлачења између слика преко Cast Queue API-ја. За аудио, Chromecast подржава MP3, AAC, FLAC, WAV и OGG. Аудио стриминг преко Google Cast-а је подржан на Chromecast Audio-у и Cast звучницима.
Cast Button — кључна UI компонента Google Cast SDK-а, која приказује иконицу Cast-а и аутоматски мења стање: неактивно (нема уређаја), доступно (уређаји пронађени), повезано (активна сесија). Притиском на Cast Button отвара се дијалог за избор уређаја. Компонента је доступна преко MediaRouteActionProvider (Android) или GCKUICastButton (iOS). Cast Button треба да буде видљив само када су Cast уређаји доступни у мрежи — CAF аутоматски скрива дугме када нема уређаја.
Mini Controller — панел на дну екрана који приказује назив садржаја, омот, дугмад за play/pause и затварање сесије. Mini Controller се појављује аутоматски када је Cast сесија активна и корисник се налази на екрану који није повезан са репродукцијом. CAF пружа готови MiniControllerFragment за Android, који се уграђује у layout. Подразумевано, Mini Controller се налази на дну екрана, али може бити подешен на било коју позицију.
// Прилагођавање Mini Controller-а преко стилова
// styles.xml
// <style name="CastMiniControllerStyle"
// parent="Theme.GoogleCast">
// <item name="castMiniBackgroundColor">#FF0000</item>
// <item name="castShowImageThumbnail">true</item>
// </style>
// Програмско управљање Mini Controller-ом
val miniController = findViewById<MiniControllerFragment>(
R.id.miniController
)
miniController.setVisibility(
isCastSessionActive()
)Expanded Controller — даљински управљач преко целог екрана за контролу репродукције на телевизору, који се отвара притиском на Mini Controller. Expanded Controller приказује: назив, опис, омот, траку напретка са могућношћу премотавања, дугмад play/pause/stop, листу нумера (ако постоји ред), регулатор јачине звука и дугме за искључивање. CAF пружа готови ExpandedControllerActivity, који се покреће аутоматски. Ако је потребан прилагођени интерфејс — проширите базни ExpandedControllerActivity.
Прилагођени Пријемник (Custom Receiver) — је веб апликација (HTML5 + CSS + JavaScript) која се учитава на Chromecast при покретању Cast сесије. За разлику од Подразумеваног Пријемника, прилагођени омогућава потпуну контролу над изгледом садржаја на телевизору: позадинске слике, анимације, прилагођене контроле, лого бренда. Прилагођени Пријемник се региструје у Google Cast Console и добија јединствени Application ID.
Развој прилагођеног Пријемника се врши у JavaScript-у коришћењем Cast Receiver Framework (CAF Receiver)-а. CAF Receiver пружа API за обраду долазних порука од Пошиљаоца, управљање медија током, обраду редова и интеграцију са DRM-ом. Пријемник ради у изолованом окружењу прегледача Chromecast-а (WebKit) са ограниченим приступом DOM-у. Минимални захтеви: HTML5, CSS3, JavaScript ES6. Пријемник се хостира на HTTPS серверу.
// Основни прилагођени Пријемник на CAF-у
const context = cast.framework.CastReceiverContext.getInstance()
const playerManager = context.getPlayerManager()
playerManager.setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
(loadData) => {
// Прилагођена обрада учитавања медија
console.log("Loading media:", loadData.media.contentId)
return loadData
}
)
context.start()
// Обрада прилагођених порука од Пошиљаоца
context.addCustomMessageListener("urn:x-cast:custom", (event) => {
console.log("Custom data:", event.data)
})Прилагођени Пријемник треба тестирати на стварном уређају преко Cast Developer Console. Google препоручује коришћење Подразумеваног Пријемника за стандардне сценарије, а прилагођеног само када је потребан сопствени интерфејс на телевизору, подршка за DRM (Widevine) или редови за репродукцију са сопственом логиком. Пријемник нема приступ DOM-у странице Пошиљаоца и не може да извршава JavaScript послат од Пошиљаоца (безбедност).
Пун пример интеграције Google Cast-а у Android апликацију коришћењем CAF-а. Апликација репродукује видео и омогућава стримовање на Chromecast преко Cast Button-а. Код укључује подешавање CastOptions, иницијализацију CastContext-а, управљање везом и учитавање медија на Cast уређај.
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-а користите виртуелни Cast уређај преко Chrome DevTools (Cast картица) или физички Chromecast. Google обезбеђује тестни Application ID — CC1AD845 (Default Media Receiver). Пре објављивања, региструјте своју апликацију у Google Cast Console и набавите продукциони Application ID. Cast SDK захтева Google Play Services 21.0.0+ и Android 5.0+.
Први чести проблем — Cast Button се не приказује. Узроци: уређаји нису у истој Wi-Fi мрежи, Chromecast не подржава DIAL (стари фирмвер) или је откривање Wi-Fi-ја искључено на телефону. Решење: проверите да су телефон и Chromecast повезани на исту мрежу (2,4 GHz или 5 GHz). Google Cast не ради преко гостујућих Wi-Fi мрежа, VPN-а или корпоративних мрежа са изолацијом клијената. Користите Cast Connect за тестирање без физичког уређаја.
Други проблем — прекид везе током репродукције. Chromecast може изгубити Wi-Fi везу због слабог сигнала, преоптерећења канала или сметњи из микроталасне пећнице (2,4 GHz). Решење: поставите Chromecast ближе рутеру, користите 5 GHz (ако је подржан), подесите QoS за Chromecast саобраћај. У апликацији обрађујте callback onRemoteMediaPlayerStatusUpdated са статусом IDLE и разлогом грешке — при губитку везе прикажите обавештење и понудите поновно повезивање.
Трећи проблем — садржај се не репродукује на Chromecast-у. Проверите: URL садржаја је доступан са интернета (Chromecast учитава садржај директно, а не преко телефона), формат подржава Chromecast, нема CORS блокирања (за .m3u8 и .mpd). Ако користите Подразумевани Пријемник, уверите се да је Application ID исправан. За прилагођени Пријемник проверите да је апликација хостирана на HTTPS-у. Користите Cast SDK Logger за отклањање грешака: CastContext.getSharedInstance().setCastLogger(...).
Често постављана питања
Google Cast користи модел „пошаљи URL” — телефон шаље Chromecast-у линк ка садржају, који се директно учитава. AirPlay (Apple) — сличан протокол за Apple екосистем. Miracast — директни пренос екрана (screen mirroring), који оптерећује телефон. Cast троши 80% мање енергије телефона и омогућава минимизирање апликације без заустављања репродукције.
Google Cast ради не само на Chromecast-у, већ и на телевизорима са уграђеним Google TV, Android TV, као и на аудио системима са Cast подршком (Nest Audio, Sonos). За развој и тестирање можете користити виртуелни Cast уређај преко Chrome DevTools-а. За интеграцију Cast-а у апликацију физички уређај није обавезан — користите Cast Connect за емулацију.
Да, Chromecast with Google TV (2020) и новији модели подржавају 4K HDR са Dolby Vision, HDR10 и HDR10+. Стандардни Chromecast (3. генерација) подржава 1080p 60fps. Chromecast Ultra — 4K HDR. За стриминг 4K потребна је брзина интернета од најмање 25 Mbps и подршка за Widevine L1 за DRM садржај (Netflix, Disney+).
Да бисте зауставили сесију, позовите CastSession.endSession(boolean stopCasting) са параметром true ако желите да зауставите репродукцију на телевизору, или false ако желите само да искључите телефон. Такође можете користити метод stop() на RemoteMediaClient-у. Корисник такође може зауставити сесију преко Cast Button-а или Mini Controller-а притиском на дугме за искључивање.
Да, преко прилагођених порука (custom messages). Пошиљалац шаље поруку преко namespace-а (нпр. urn:x-cast:custom.namespace) са произвољним JSON објектом. Пријемник обрађује поруку преко addCustomMessageListener-а. Прилагођене поруке су подржане само са прилагођеним Пријемником — Подразумевани Пријемник не обрађује прилагођене namespace-ове. Максимална величина поруке — 64 KB.
Резиме
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође