Google chromecast from android

Смотрю и слушаю где хочу. Интегрируем Chromecast в Android-приложение

На улице я часто слушаю аудиокниги и подкасты со смартфона. Когда прихожу домой, мне хочется продолжить слушать их на Android TV или Google Home. Но далеко не все приложения поддерживают Chromecast. А было бы удобно.

По статистике Google за последние 3 года, количество девайсов на Android TV увеличилось в 4 раза, а число партнеров-производителей уже превысило сотню: «умные» телевизоры, колонки, TV-приставки. Все они поддерживают Chromecast. Но в маркете ещё много приложений, которым явно не хватает интеграции с ним.

В этой статье я хочу поделиться своим опытом интеграции Chromecast в Android-приложение для воспроизведения медиа-контента.

Как это работает

Если вы впервые слышите слово «Chromecast», то постараюсь вкратце рассказать. С точки зрения пользования, это выглядит примерно так:

  1. Пользователь слушает музыку или смотрит видео через приложение или веб-сайт.
  2. В локальной сети появляется Chromecast-девайс.
  3. В интерфейсе плеера должна появиться соответствующая кнопка.
  4. Нажав её, пользователь выбирает нужный девайс из списка. Это может быть Nexus Player, Android TV или «умная» колонка.
  5. Дальше воспроизведение продолжается именно с этого девайса.

Технически происходит примерно следующее:

  1. Google Services отслеживают наличие Chromecast девайсов в локальной сети посредством бродкастинга.
  2. Если к вашему приложению подключен MediaRouter, то вам придёт событие об этом.
  3. Когда пользователь выбирает Cast-девайс, и подключается к нему, открывается новая медиа-сессия (CastSession).
  4. Уже в созданную сессию мы будем передавать контент для воспроизведения.
    Звучит очень просто.

Интеграция

У Google есть свой SDK для работы с Chromecast, но он плохо покрыт документацией, а его код обфусцирован. Поэтому многие вещи пришлось проверять методом тыка. Давайте обо всём по порядку.

Инициализация

Для начала нам надо подключить Cast Application Framework и MediaRouter:

Затем Cast Framework должен получить идентификатор приложения (об этом позже), и типы поддерживаемого медиаконтента. То есть если у нас приложение воспроизводит только видео, то кастинг на колонку Google Home будет невозможен, и в списке девайсов её не будет. Для этого нужно создать реализацию OptionsProvider:

И объявить его в Manifest:

Регистрируем приложение

Чтобы Chromecast мог работать с нашим приложением, его необходимо зарегистрировать в Google Cast SDK Developers Console. Для этого потребуется аккаунт Chromecast разработчика (не путать с аккаунтом разработчика Google Play). При регистрации придётся внести разовый взнос в 5$. После публикации ChromeCast Application нужно немного подождать.
В консоли можно изменить внешний вид Cast-плеера для девайсов с экраном и посмотреть аналитику кастинга в рамках приложения.

MediaRouter

MediaRouteFramework – это механизм, который позволяет находить все удалённые устройства воспроизведения вблизи пользователя. Это может быть не только Chromecast, но и удалённые дисплеи и колонки с использованием сторонних протоколов. Но нас интересует именно Chromecast.

В MediaRouteFramework есть View, которая отражает состояние медиароутера. Есть два способа её подключить:

А из кода требуется всего лишь зарегистрировать кнопку в CastButtonFactory. тогда в нее будет прокидываться текущее состояние медиароутера:

Теперь, когда приложение зарегистрировано, и MediaRouter настроен, можно подключаться к ChromeCast-девайсам и открывать сессии к ним.

Кастинг медиаконтента

ChromeCast поддерживает три основных вида контента:

В зависимости от настроек плеера, типа медиаконтента и cast-девайса, интерфейс плеера может отличаться.

CastSession

Итак, пользователь выбрал нужный девайс, CastFramework открыл новую сессию. Теперь наша задача заключается в том, чтобы отреагировать на это и передать девайсу информацию для воспроизведения.
Чтобы узнать текущее состояние сессии и подписаться на обновление этого состояния, воспользуемся объектом SessionManager:

Читайте также:  Как сохранять кэш для андроида

А ещё можем узнать, нет ли открытой сессии в данный момент:

У нас есть два основных условия, при которых мы можем начинать кастинг:

  1. Сессия уже открыта.
  2. Есть контент для кастинга.

При каждом из этих двух событий можем проверять состояние, и если всё в порядке, то начинать кастить.

Кастинг

Теперь, когда у нас есть что кастить и куда кастить, можем перейти к самому главному. Помимо всего прочего, у CastSession есть объект RemoteMediaClient, который отвечает за состояние воспроизведения медиаконтента. С ним и будем работать.

Создадим MediaMetadata, где будет храниться информация об авторе, альбоме и т. д. Очень похоже на то, что мы передаём в MediaSession, когда начинаем локальное воспроизведение.

Параметров у MediaMetadata много, и их лучше посмотреть в документации. Приятно удивило, что можно добавить изображение не через bitmap, а просто ссылкой внутри WebImage.

Объект MediaInfo несёт информацию о метаданных контента и будет говорить о том, откуда медиаконтент брать, какого он типа, как его проигрывать:

Напомню, что contentType – это тип контента по спецификации MIME.
Также в MediaInfo можно передать рекламные вставки:

  • setAdBreakClips – принимает список рекламных роликов AdBreakClipInfo с указанием ссылок на контент, заголовка, тайминга и временем, через которое реклама становится пропускаемой.
  • setAdBreaks – информация о разметке и тайминге рекламных вставок.

В MediaLoadOptions мы описываем то, как будем обрабатывать медиапоток (скорость, начальная позиция). Также документация говорит, что через setCredentials можно передать заголовок запроса для авторизации, но у меня запросы от Chromecast не включали в себя заявленные поля для авторизации.

После того как всё готово, мы можем отдать все данные в RemoteMediaClient, и Chromecast начнёт воспроизведение. Важно поставить локальное воспроизведение на паузу.

Обработка событий

Видео заиграло, а что дальше? Что если пользователь нажмёт паузу на телевизоре? Чтобы узнавать о событиях, происходящих со стороны Chromecast, у RemoteMediaClient есть обратные вызовы:

Узнать текущий прогресс тоже просто:

Опыт интеграции с существующим плеером

В приложении, над которым я работал, уже был готовый медиаплеер. Стояла задача интегрировать в него поддержку Chromecast. В основе медиаплеера лежал State Machine, и первой мыслью было добавить новое состояние: «CastingState». Но эта идея сразу была отвергнута, потому что каждое состояние плеера отражает состояние воспроизведения, и не важно, что служит реализацией ExoPlayer или ChromeCast.
Тогда пришла идея сделать некую систему делегатов с расстановкой приоритетов и обработкой «жизненного цикла» плеера. Все делегаты могут получать события о состоянии плеера: Play, Pause и т.д. — но только ведущий делегат будет воспроизводить медиаконтент.

У нас есть примерно такой интерфейс плеера:

Внутри у него будет лежать State Machine с таким множеством состояний:

  • Empty — начальное состояние до инициализации.
  • Preparing — плеер инициализирует воспроизведение медиаконтента.
  • Prepared — медиаданные загружены и готовы к воспроизведению.
  • Playing
  • Paused
  • WaitingForNetwork
  • Error

Раньше каждое состояние при инициализации отдавало команду в ExoPlayer. Теперь оно будет отдавать команду в список Playing-делегатов, и «Ведущий» делегат сможет его обработать. Поскольку делегат реализует все функции плеера, то его тоже можно наследовать от интерфейса плеера и при необходимости использовать отдельно. Тогда абстрактный делегат будет выглядеть так:

Для примера я упростил интерфейсы. В реальности событий немного больше.
Делегатов может быть сколько угодно, как и источников воспроизведения. А делегат для Chromecast может выглядеть примерно так:

Прежде чем отдать команду о воспроизведении, нам надо определиться с ведущим делегатом. Для этого они добавляются в порядке приоритета в плеер, и каждый из них может отдавать состояние своей готовности в методе readyForLeading(). Полный код примера можно увидеть на GitHub.

Есть ли жизнь после ChromeCast

После того как я интегрировал поддержку Chromecast в приложение, мне стало приятнее приходить домой и наслаждаться аудиокнигами не только через наушники, но и через Google Home. Что касается архитектуры, то реализация плееров в разных приложениях может различаться, поэтому не везде такой подход будет уместен. Но для нашей архитектуры это подошло. Надеюсь, эта статья была полезной, и в ближайшем будущем появится больше приложений, умеющих интегрироваться с цифровым окружением!

Читайте также:  Почему андроид не видит наушники аирподс проводные

Источник

Google Cast на телевизоре с Android TV. Что это, как настроить и как пользоваться?

Привет! Решил подготовить сегодня интересную, полезную и актуальную статью по технологии Google Cast. Почему актуальную, а потому, что телевизоры, которые работают на Android TV появились относительно недавно, и только набирают популярности. А если у вас телевизор на Android TV (пока что это Philips, или Sony) , то вы можете пользоваться всеми фишками технологии Google Cast без дополнительных устройств. Не нужно покупать специальный адаптер Google Chromecast, который стоит примерно 40-50 долларов.

Забегая наперед, скажу, что Google Cast это одна из функций моего телевизора Philips 43PUS7150/12, которой я действительно пользуюсь, и пользуюсь часто. Сейчас я расскажу что это за технология, какие у нее возможности, и как я пользуюсь Google Cast на своем телевизоре с Android TV.

Что такое Google Cast и Chromecast?

Google Cast – это технология которая позволяет передавать на телевизор изображение, видео, или музыку, со смартфона, планшета, или ноутбука. Все это без проводов. Все что нужно, это устройство с поддержкой Google Cast, с которого будем передавать контент, телевизор с Android TV, или любой другой телевизор с подключенным Chromecast адаптером, и домашняя Wi-Fi сеть, к которой должны быть подключены эти устройства.

Chromecast – это специальный адаптер, который подключается к телевизору в HDMI разъем, и позволяет использовать этот телевизор для воспроизведения видео, и другого контента с мобильных устройств, или компьютера (с браузера Chrome) . Его можно купить практически в любом магазине цифровой техники. Цена, как я уже писал выше, примерно 40-50 долларов.

Возможности Google Cast:

  • Можно выводить видео с приложения YouTube на экран телевизора (этой возможностью я пользуюсь чаще всего) , и управлять воспроизведением.
  • Смотреть фото с ваши мобильных устройств на экране телевизор.
  • Воспроизводить музыку со смартфона, или планшета через динамики телевизора, или через специальные динамики, которые поддерживают функцию «Google Cast для аудио».
  • Через приложение Chromecast можно выводить на телевизор все, что происходит на экране вашего Android, или iOS устройства. И даже, играть в игры (правда, есть небольшая задержка в выводе картинки на большой экран).
  • А через браузер Chrome с расширением Google Cast можно транслировать на телевизор открытые в браузере вкладки.

Как пользоваться Google Cast на телевизорах с Android TV?

На самом деле, все очень просто и понятно. У нас должен быть телевизор с Android TV, на который мы будем выводить изображение и звук. У нас должно быть устройство, с которого мы будем транслировать фото, видео, музыку. Подходят все смартфоны и планшеты на Android, версии 2.3 и выше. Устройства от Apple: iPhone, iPad и iPod Touch, которые работают на iOS версии 7.0 и выше. Ноутбук, или компьютер с установленным браузером Chrome.

Я уже писал как подключить к Wi-Fi телевизор Philips. А ваши смартфоны, планшеты и ноутбуки, я думаю к Wi-Fi сети уже подключены.

На телевизоре настраивать вообще ничего не нужно. Он должен быть просто включен и подключен к вашей Wi-Fi сети. Управлять мы будем с нашего смартфона, планшета, или компьютера. Поехали!

Трансляция видео с YouTube на телевизор по Google Cast

Это та возможность, которой я пользуюсь практически каждый день. Я транслирую видео со своего iPad, на экран телевизора Philips. работает все очень просто. Берем наш смартфон, или планшет, который работает на Android, или iOS, и запускаем на нем приложение YouTube.

Включаем любой ролик, и сверху нажимаем на кнопку Google Cast. Появится ваш телевизор, выбираем его.

Воспроизведение видео начнется на телевизоре. Кнопка Google Cast станет синей. Если нажать на нее еще раз, то можно будет отключится от телевизора.

Читайте также:  Топ бюджетных телефонов андроид

С Android смартфона все так же работает.

Когда идет воспроизведение ролика на телевизоре, вы видео на самом смартфоне, или планшете можете свернуть. Более, того, можно полностью свернуть приложение YouTube, при этом воспроизведение будет продолжатся. Можно регулировать громкость кнопками на мобильном устройстве. Не знаю как через адаптер Chromecast, но на телевизоре с Android TV, при регулировке громкости на устройстве, громкость регулировался на телевизоре (правда, там большой шаг) .

Еще одна интересная фишка, можно создавать список воспроизведения. Когда устройство подключено к телевизору, просто нажмите на любое видео, и появится окно с выбором: либо воспроизвести сейчас, либо добавить в очередь на воспроизведение. Очень удобно. Все просто и понятно, разобраться совсем не сложно.

Выводим на телевизор все, что происходит на экране смартфона, или планшета

Мы можем вывести на телевизор абсолютно все, что происходит на экране мобильного устройства. На телевизоре будет отображаться меню, программы, игры и т. д. Все, что мы видим на экране смартфона. Примерно так же работает технология Miracast.

Нам понадобится приложение, которое называется Chromecast. Установить его можно с Google Play, или с App Store (воспользуйтесь поиском) . После установки запускаем приложение, и запускам трансляцию экрана на наш телевизор.

Результат выглядит вот так:

А вот так выглядят программы с Android смартфона на телевизоре:

И даже игры можно выводить на телевизор по Google Cast.

Игры немного глючили. Изображение появлялось с задержкой. Возможно, если подключить более мощный смартфон, то все работало бы лучше. Но даже минимальная задержка все ровно будет.

На телефоне (Android) все работает как часы. А вот вывести экран с iPad у меня почему-то не получилось. Он просто не находил телевизор, и все время просил подключится к сети, в которой есть Chromecast устройство. Хотя, все было подключено, и трансляция видео в YouTube работала.

Транслируем изображение (вкладки) с браузера Chrome на телевизор

Еще одна возможность – трансляция вкладок с браузера Chrome. Телевизор и компьютер (ноутбук), должен быть подключен к одной Wi-Fi сети. Кстати, компьютер может работать как на Windows (от Windows 7 и выше) , так и на Mac OS X (от версии 10.7 и выше) , или Chrome OS.

Неактуально: Все что нужно, это установить браузер Google Chrome, и в браузере установить расширение «Google Cast». Для установки откройте настройки браузера, перейдите на вкладку Расширения, нажмите на ссылку «Еще расширения», в поиске введите «Google Cast» и установите расширение. В браузере появится кнопка, нажав на которую, можно запустить трансляцию вкладки на телевизор.

Обновление: как оказалось, расширения «Google Cast» больше нет. Функция трансляции теперь встроенная в браузер. Откройте меню и выберите «Трансляция. » Если такого пункта у вас нет, то обновите свой браузер Google Chrome.

Для начала трансляции просто выбираем свой телевизор.

На телевизоре сразу появится изображение с ноутбука. Все работает стабильно и быстро.

Вы можете прокручивать страницу, и переходить по ссылкам. Все это будет отображаться на экране телевизора. А если открыть в этой вкладке видео на сайте YouTube, то начнется трансляция не через вкладу, а через приложение на телевизоре (как с мобильных устройств) . Звук так же будет передаваться. Нажав на кнопку в браузере, можно прекратить трансляцию, поставить на паузу, или отключить звук.

Теперь вы сможете запускать трансляцию из браузера на телевизор еще быстрее.

Заключение

Я рассказал вам об основных возможностях Google Cast, которыми пользуюсь сам. Можно так же воспроизводить музыку со смартфона, через динамики телевизора. Сделать это можно через приложение Google Play Музыка. Или транслировать фото с галереи. Просо нажимаем на кнопку «Google Cast» и выводим изображение на телевизор.

Если у вас телевизор на Android TV, или есть адаптер Chromecast, то обязательно воспользуйтесь всеми возможностями этой технологии. Напишите в комментариях, как вы используете Google Cast. Всего хорошего!

Источник

Оцените статью