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): мобилното приложение изпраща URL на съдържанието към Chromecast, а устройството само зарежда и възпроизвежда потока, без да натоварва телефона.
Ключовото предимство на 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 връзка с Приемника чрез порт 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 и получете production 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 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също