Google Cast: ключові поняття, протокол стрімінгу та Cast SDK

Автор: IT Sectr Опубліковано: 2026-04-30 Час читання: 10 хв

Google Cast — це технологія від Google для стрімінгу мультимедійного контенту з мобільних пристроїв на телевізори та аудіосистеми через протокол Cast. SDK дозволяє розробникам додавати підтримку Chromecast у додатки для Android та iOS, передаючи відео, аудіо та зображення на великі екрани. За даними Google Cast Developer Documentation, 2025, понад 100 мільйонів пристроїв Chromecast продано по всьому світу, а Cast SDK використовується в 40 000+ додатках.

Головне

  • Google Cast — протокол і SDK для стрімінгу контенту з мобільних пристроїв на телевізори та колонки
  • Sender — мобільний додаток, який надсилає контент на Cast-пристрій
  • Receiver — додаток на телевізорі (Chromecast), який приймає та відтворює контент
  • CAF SDK — Cast Application Framework, спрощений API для інтеграції Cast (рекомендується Google)
  • Media Streams — HLS, DASH та MP4 стрімінг через Cast з контролем відтворення

Що таке Google Cast?

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) і вимагає, щоб пристрій-відправник та приймач знаходилися в одній мережі.

Архітектура Cast: Sender, Receiver та протоколи

Архітектура Google Cast складається з трьох компонентів: Sender (мобільний додаток), Receiver (додаток на Chromecast/телевізорі) та транспортний протокол. Sender використовує Cast SDK для виявлення пристроїв у мережі, встановлення з’єднання та надсилання команд відтворення. Receiver — це веб-додаток (HTML5 + CSS + JavaScript), що працює в браузері Chromecast, який завантажує та відтворює контент.

Протокол Google Cast базується на DIAL (Discovery and Launch) для виявлення пристроїв та фірмовому протоколі поверх WebSocket для керування відтворенням. DIAL використовує SSDP (Simple Service Discovery Protocol) для пошуку Cast-пристроїв у локальній мережі. Після виявлення Sender встановлює WebSocket-з’єднання з Receiver через порт 8008 або 8009 і надсилає команди у форматі JSON: LOAD, PLAY, PAUSE, STOP, SEEK.

КомпонентПлатформаТехнологія
SenderAndroid / iOS / ChromeCast SDK (Java/Kotlin, Swift, JS)
Default ReceiverChromecast / Android TVВбудований (налаштування через Google Cast Console)
Custom ReceiverChromecast / Android TVВеб-додаток (HTML5, CAF Receiver JS)
ПротоколЛокальна мережа Wi-FiWebSocket + JSON + DIAL/SSDP
Медіа-транспортІнтернетHLS, DASH, MP4 (пряме завантаження Chromecast)

Протокол Cast v2 для керування відтворенням

Sender надсилає Receiver не сам контент, а URL (медіа URL) та метадані (назва, зображення, субтитри). Receiver самостійно завантажує контент за URL, що дозволяє телефону не витрачати батарею на передачу даних. Після початку відтворення Sender може надсилати команди паузи, перемотування, регулювання гучності та отримувати статус відтворення через Cast Protocol v2.

Cast Application Framework (CAF): швидка інтеграція

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 розробнику не потрібно писати власний Receiver — Google надає Default Receiver, який автоматично завантажує та відтворює контент. Default Receiver підтримує HLS, DASH, MP4, WebM, MP3, зображення та субтитри. Налаштування Receiver виконується в Google Cast Console — достатньо вказати URL контенту, і Default Receiver обробить все інше. Кастомний Receiver потрібен тільки для нестандартних сценаріїв: кастомний UI на телевізорі, підтримка DRM, черги відтворення.

kotlin
// Налаштування CAF Receiver Options
val receiverOptions = CastReceiverOptions.Builder(context)
    .setReceiverApplicationId(
        CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID
    )
    .build()

// Підключення Cast Context
val castContext = CastContext.getSharedInstance(context)
castContext.setReceiverOptions(receiverOptions)

Cast Connect: тестування без фізичного пристрою

CAF автоматично обробляє життєвий цикл підключення: виявлення пристроїв через Cast Button, встановлення з’єднання, завантаження медіа, паузу при тимчасовій втраті з’єднання та перепідключення. CAF також підтримує черги відтворення (media queues) для плейлистів та кнопку Cast на Lock Screen та в Notification Center (Android). Мінімальна версія: Android 5.0 (API 21), iOS 14+.

Медіа-стрімінг: HLS, DASH та MP4 на Chromecast

Google Cast підтримує основні формати стрімінгу: HLS (HTTP Live Streaming) від Apple, DASH (Dynamic Adaptive Streaming over HTTP) та прогресивний MP4. Chromecast автоматично вибирає оптимальну якість відео на основі швидкості інтернет-з’єднання (adaptive bitrate). Для 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 потрібен кастомний Receiver з інтеграцією Shaka Player або ExoPlayer. За даними Google, Chromecast with Google TV підтримує 4K HDR з Widevine L1 для Netflix, Disney+ та інших сервісів.

kotlin
// Завантаження медіа на 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 UI компоненти: Cast Button та Mini Controller

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 розташовується внизу екрана, але може бути налаштований на будь-яку позицію.

kotlin
// Кастомізація 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, який запускається автоматично. Якщо потрібен кастомний UI — розширте базовий ExpandedControllerActivity.

Кастомний Receiver: власний інтерфейс на телевізорі

Кастомний Receiver — це веб-додаток (HTML5 + CSS + JavaScript), який завантажується на Chromecast при старті Cast-сесії. На відміну від Default Receiver, кастомний дозволяє повністю контролювати зовнішній вигляд контенту на телевізорі: фонові зображення, анімації, кастомні елементи керування, логотип бренду. Кастомний Receiver реєструється в Google Cast Console та отримує унікальний Application ID.

Розробка кастомного Receiver ведеться на JavaScript з використанням Cast Receiver Framework (CAF Receiver). CAF Receiver надає API для обробки вхідних повідомлень від Sender, керування медіа-потоком, обробки черг та інтеграції з DRM. Receiver працює в ізольованому браузерному середовищі Chromecast (WebKit) з обмеженим доступом до DOM. Мінімальні вимоги: HTML5, CSS3, JavaScript ES6. Receiver хоститься на HTTPS-сервері.

js
// Базовий кастомний Receiver на 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()

// Обробка кастомних повідомлень від Sender
context.addCustomMessageListener("urn:x-cast:custom", (event) => {
    console.log("Custom data:", event.data)
})

Розробка та деплой кастомного Receiver

Кастомний Receiver необхідно протестувати на реальному пристрої через Cast Developer Console. Google рекомендує використовувати Default Receiver для стандартних сценаріїв і кастомний — тільки при необхідності кастомного UI на телевізорі, підтримки DRM (Widevine) або черг відтворення з кастомною логікою. Receiver не має доступу до DOM сторінки Sender і не може виконувати JavaScript, надісланий від Sender (безпека).

Приклад коду: інтеграція Google Cast на Android

Повний приклад інтеграції Google Cast в Android-додаток з використанням CAF. Додаток відтворює відео та дозволяє стрімити його на Chromecast через Cast Button. Код включає налаштування CastOptions, ініціалізацію CastContext, обробку підключення та завантаження медіа на Cast-пристрій.

kotlin
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 tab) або фізичний 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

Перша часта проблема — Cast Button не відображається. Причини: пристрої не в одній Wi-Fi мережі, Chromecast не підтримує DIAL (застаріла прошивка), або на телефоні вимкнено виявлення Wi-Fi. Рішення: перевірте, що телефон та Chromecast підключені до однієї мережі (2.4 GHz або 5 GHz). Google Cast не працює через гостьові мережі Wi-Fi, VPN або корпоративні мережі з ізоляцією клієнтів. Використовуйте Cast Connect для тестування без фізичного пристрою.

Друга проблема — розрив з’єднання під час відтворення. Chromecast може втрачати Wi-Fi-з’єднання через слабкий сигнал, перевантаження каналу або interference від мікрохвильовки (2.4 GHz). Рішення: розмістіть Chromecast ближче до роутера, використовуйте 5 GHz (якщо підтримується), налаштуйте QoS для трафіку Chromecast. У додатку обробляйте callback onRemoteMediaPlayerStatusUpdated зі станом IDLE та error reason — при втраті з’єднання показуйте сповіщення та пропонуйте перепідключитися.

Третя проблема — контент не відтворюється на Chromecast. Перевірте: URL контенту доступний з інтернету (Chromecast завантажує контент безпосередньо, а не через телефон), формат підтримується Chromecast, немає блокування по CORS (для .m3u8 та .mpd). Якщо використовується Default Receiver, переконайтеся, що Application ID правильний. Для кастомного Receiver перевірте, що додаток хоститься на HTTPS. Використовуйте Cast SDK Logger для налагодження: CastContext.getSharedInstance().setCastLogger(...).

Часто задавані питання

Чим Google Cast відрізняється від AirPlay та Miracast?

Google Cast використовує модель «надіслати URL» — телефон передає Chromecast посилання на контент, який завантажується безпосередньо. AirPlay (Apple) — аналогічний протокол для екосистеми Apple. Miracast — пряма трансляція екрана (screen mirroring), що навантажує телефон. Cast споживає на 80% менше енергії телефону та дозволяє згорнути додаток без зупинки відтворення.

Чи потрібен Chromecast для роботи Google Cast?

Google Cast працює не тільки на Chromecast, але й на телевізорах з вбудованим Google TV, Android TV, а також на аудіосистемах з Cast-підтримкою (Nest Audio, Sonos). Для розробки та тестування можна використовувати віртуальний Cast-пристрій через Chrome DevTools. Для інтеграції Cast у додаток фізичний пристрій не обов’язковий — використовуйте Cast Connect для емуляції.

Чи підтримує Google Cast 4K та HDR?

Так, 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+).

Як зупинити Cast-сесію програмно?

Для зупинки сесії викличте CastSession.endSession(boolean stopCasting) з параметром true, якщо потрібно зупинити відтворення на телевізорі, або false, якщо просто відключити телефон. Також можна використати метод stop() на RemoteMediaClient. Користувач також може зупинити сесію через Cast Button або Mini Controller, натиснувши кнопку відключення.

Чи можна передавати кастомні дані через Google Cast?

Так, через кастомні повідомлення (custom messages). Sender надсилає повідомлення через namespace (наприклад, urn:x-cast:custom.namespace) з довільним JSON-об’єктом. Receiver обробляє повідомлення через addCustomMessageListener. Кастомні повідомлення підтримуються тільки з кастомним Receiver — Default Receiver не обробляє користувацькі namespace. Максимальний розмір повідомлення — 64 KB.

Підсумки

  • Google Cast — протокол стрімінгу контенту з мобільних пристроїв на телевізори через Chromecast та Android TV
  • Архітектура — Sender (додаток) надсилає URL контенту, Receiver (Chromecast) завантажує та відтворює
  • CAF SDK — Cast Application Framework з готовими компонентами Cast Button, Mini Controller та Expanded Controller
  • Формати — HLS, DASH, MP4, WebM, MP3, AAC, FLAC з адаптивним бітрейтом та субтитрами
  • Default Receiver — вбудований приймач Google для швидкої інтеграції без написання коду на телевізорі
  • Кастомний Receiver — веб-додаток на HTML5/JS для кастомізації інтерфейсу та DRM на телевізорі
  • Налагодження — перевірка Wi-Fi мережі, URL контенту та підтримки форматів; використовуйте Cast SDK Logger

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також