четверг, 16 июня 2016 г.

Кратко о разработке для ТВ-приставок: Chromecast

Последние несколько месяцев я пишу приложение для просмотра видео. И вот, заказчики решили сделать интеграцию с ТВ-приставками. По этой причине у меня образовались три приставки-стика,— Chromecast, FireTV и Roku,— которые оказались совершенно не похожими друг на друга. Расскажу о них с точки зрения разработчика. Кода здесь не будет, просто общие соображения. Получилось много текста, так что про каждую приставку будет отдельная заметка.

Знакомство с приставками началось с Chromecast, так как он единственный продаётся в России, а остальные ехали их Штатов. Устройство оказалось довольно глупым: единственное, что оно умеет, это показывать выбранное на телефоне видео, а в свободное время крутить скринсейвер с картинками. С точки зрения пользователя трансляция работает так: открываем приложение, поддерживающее Chromecast, нажимаем кнопочку с иконкой трансляции , выбираем из диалога нужную приставку, после этого видео начинает проигрываться на телевизоре, но на телефоне остаётся всё управление (play, pause, etc). Кстати говоря, интегрировать с хромкастом можно не только Android-приложения, но и iOS.

Как добавить в своё приложение эту самую кнопку и сделать, чтобы видео транслировалось, описано в документации к Google Cast. Если по-человечески, то нужны две вещи: Sender Application и Receiver Application

Sender App

Sender App — это то, что будет управлять Хромкастом, то есть наше Android/iOS/Chrome-приложение. Для андроида надо следовать вот этой инструкции. Возможно, когда-нибудь Гугл переделает Cast SDK, но сейчас там куча мути с коллбэками и переколлбэками, в результате которой мы обретаем объект класса RemoteMediaPlayer. А он уже позволяет управлять Chromecast-ом: начинать воспроизведение с заданного URL, ставить на паузу, прокручивать и всё такое прочее.

Receiver App

На осознание этой штуки у меня ушло порядочно времени. А суть такая, что хромкасту для трансляции, кроме ссылки на видео, нужен ещё и макет, в который он будет это видео вписывать. Так что Receiver App — это такая специальным образом настроенная html-ка, на которую нужно обязательно ходить через https. Теоретически можно использовать некий стандартный макет, навесив на него свои стили (это называется Styled Media Receiver), но у меня с ним ничего не получилось (скорее всего, просто не хватило понимания, что это вообще такое). Если выбрать Custom Receiver, то можно написать целиком свой макет. Это довольно муторное занятие, лично мне хватило взять образец с гитхаба, поменять логотипы и немного поправить верстку. Но при желании возможности здесь самые широкие.

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

И про неожиданные бонусы

Так как Chromecast очень простой и почти ничего не умеет, то его даже необязательно втыкать в HDMI, сойдёт и DVI через переходник. А чтобы устройство начало обнаруживаться, ему и вовсе достаточно только питания. С FireTV и Roku такое уже не прокатит, им нужен честный HDMI.

А ещё очень порадовала поддержка на StackOverflow. Есть человек, который мониторит вопросы о Google Cast SDK и действительно очень помогает.

Комментариев нет: