Отметим: когда пользователь нажимает Cast, контент должен появиться на большом экране мгновенно. Но реализация этой кнопки — нетривиальная задача: интеграция Google Cast SDK, настройка сессии, обработка потери соединения, управление паузой и перемоткой. Устройства должны быть в одной сети, а приложение — пройти App Store Review Guidelines (Section 4.2). Мы решаем это за вас. Наш опыт — 5+ лет в мобильной разработке и 15+ проектов с Chromecast-стримингом. Используем проверенные паттерны, гарантируем стабильную работу на Android и iOS. Время выхода на рынок сокращается на 30% за счёт готовых компонентов. Экономия бюджета на старте может достигать 40% при использовании Default Media Receiver.
Как реализовать Chromecast-стриминг за 2–3 дня?
Самый быстрый путь — использовать Default Media Receiver. Телефон (Sender) отправляет URL контента, Receiver тянет поток напрямую. Не нужно писать веб-приложение. Управление воспроизведением — через Google Cast SDK. Базовая интеграция занимает 2–3 дня. Для кастомных требований (интерфейс, DRM, аналитика) разрабатываем собственный Receiver — добавляется ещё 2–3 дня. Снижение затрат на разработку по сравнению с самостоятельной реализацией составляет до 50%.
Подключение Google Cast SDK
Android. com.google.android.gms:play-services-cast-framework:latest в build.gradle — стандартный пакет для Chromecast Android. Инициализация в Application:
class App : Application() { override fun onCreate() { super.onCreate() val options = CastOptions.Builder() .setReceiverApplicationId(CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID) .build() CastContext.getSharedInstance(this, executor).addOnSuccessListener { castContext -> // Cast контекст готов } } } DEFAULT_MEDIA_RECEIVER_APPLICATION_ID — стандартный Default Media Receiver, воспроизводит HLS, DASH, MP4, MP3. Для кастомного — регистрируем приложение в Google Cast Developer Console и используем свой App ID. Подробнее о настройке CastContext см. в документации Google Cast.
iOS. pod 'google-cast-sdk' или GoogleCast через SPM — основной SDK для Chromecast iOS. API аналогично Android.
Кнопка Cast в UI
Google Cast SDK предоставляет готовые кнопки: UICastButton (iOS) и MediaRouteButton (Android). Они показывают список устройств и меняют вид при подключении:
// В меню toolbar override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_player, menu) CastButtonFactory.setUpMediaRouteButton(this, menu, R.id.media_route_menu_item) return true } Для Jetpack Compose — AndroidView с MediaRouteButton.
Запуск воспроизведения на Receiver
val castSession = CastContext.getSharedInstance(context).sessionManager.currentCastSession val remoteClient = castSession?.remoteMediaClient ?: return val mediaMetadata = MediaMetadata(MediaMetadata.MEDIA_TYPE_MOVIE).apply { putString(MediaMetadata.KEY_TITLE, "Название фильма") putString(MediaMetadata.KEY_SUBTITLE, "Описание") addImage(WebImage(Uri.parse(thumbnailUrl))) } val mediaInfo = MediaInfo.Builder(streamUrl) .setStreamType(MediaInfo.STREAM_TYPE_BUFFERED) .setContentType("application/x-mpegURL") // HLS, или video/mp4 для MP4 .setMetadata(mediaMetadata) .build() val loadOptions = MediaLoadRequestData.Builder() .setMediaInfo(mediaInfo) .setAutoplay(true) .setCurrentTime(startPositionMs.toLong()) .build() remoteClient.load(loadOptions) Управление воспроизведением
RemoteMediaClient — центральный объект для воспроизведения на Chromecast: play(), pause(), seek(position), setStreamVolume(volume). Состояние отслеживается через Callback:
remoteClient.registerCallback(object : RemoteMediaClient.Callback() { override fun onStatusUpdated() { val status = remoteClient.mediaStatus ?: return val position = status.streamPosition val isPlaying = status.playerState == MediaStatus.PLAYER_STATE_PLAYING updateUI(isPlaying, position) } }) Mini Controller и Expanded Controller — интеграция chromecast стриминга
Встроенные компоненты: MiniControllerFragment — полоска управления внизу, ExpandedControllerActivity — полноэкранный плеер. Подключаются декларативно — минимум кода. Эти компоненты автоматически показывают состояние подключения к Chromecast устройству.
Почему стоит использовать кастомный Receiver?
Default Receiver покрывает 80% задач. Но если нужен уникальный интерфейс, субтитры Subrip, аналитика или DRM (Widevine), без кастомного не обойтись. Мы создаём веб-приложение на HTML5/JavaScript. Кастомный Receiver увеличивает время разработки на 70%, но даёт полный контроль. В 4 раза больше возможностей по кастомизации по сравнению с Default.
| Характеристика | Default Receiver | Кастомный Receiver |
|---|---|---|
| Время интеграции | 2–3 дня | 5–6 дней |
| Кастомизация UI | Ограничена | Полный контроль |
| Поддержка DRM | Нет | Да (Widevine) |
| Аналитика | Нет | Сбор любых метрик |
| Сложность | Минимальная | Требует веб-разработки |
Основные этапы интеграции
| Этап | Длительность | Описание |
|---|---|---|
| Анализ требований | 1 день | Определение формата контента, DRM, кастомизации |
| Выбор Receiver | 0.5 дня | Default или кастомный, регистрация в консоли Google Cast |
| Интеграция SDK | 1 день | Добавление зависимостей, инициализация CastContext |
| Реализация кнопки Cast | 0.5 дня | Настройка MediaRouteButton, обработка сессии |
| Управление воспроизведением | 1 день | Play/pause/seek через RemoteMediaClient |
| Тестирование | 1 день | На реальных устройствах (Chromecast, Android TV, Google Nest) |
| Деплой | 0.5 дня | Публикация в App Store и Google Play с учётом политик |
Сессия Cast и переподключение
При потере Wi-Fi CastSession переходит в состояние TEMPORARILY_DISCONNECTED, через 3 минуты — DISCONNECTED. SessionManagerListener.onSessionSuspended / onSessionResumed обрабатывают переподключение, возобновляем воспроизведение с сохранённой позиции. При возврате в приложение Cast SDK автоматически восстанавливает сессию через CastContext.sessionManager.currentCastSession.
Chromecast на React Native и Flutter
React Native: react-native-google-cast — неофициальный враппер. Стабилен для базовых сценариев, расширенный функционал требует нативного кода. Flutter: официального пакета нет, flutter_google_cast нестабилен. Для production рекомендуем нативную реализацию через MethodChannel. Нативные решения в 2 раза надёжнее кросс-платформенных врапперов. Трансляция на телевизор через Cast также доступна из веб-вью, но управление ограничено.
Дополнительные возможности кастомного Receiver
Кастомный Receiver позволяет добавить собственную обработку ошибок, интеграцию с analytics (Google Analytics, Firebase) и поддержку нестандартных форматов (например, live-потоки с задержкой). Подробнее в официальной документации.
Что входит в работу
- Интеграция Google Cast SDK на Android (Kotlin) и iOS (Swift)
- Кнопка Cast и кастомные UI: MiniController, Expanded Controller
- Управление воспроизведением (play/pause/seek/volume)
- Обработка сессий, переподключение, сохранение позиции
- Тестирование на реальных устройствах (Chromecast, Android TV, Google Nest)
- Документация и доступ к исходному коду
- Поддержка после деплоя (1 месяц)
Сроки и стоимость
Сроки варьируются от 2 до 6 дней. Стоимость рассчитывается индивидуально после аудита вашего проекта. Свяжитесь с нами, чтобы получить консультацию и предварительную оценку. Закажите Chromecast-стриминг под ключ — мы гарантируем стабильную работу на всех устройствах. Получите консультацию и убедитесь, что ваша трансляция на телевизор работает безупречно.







