Платформа ввода ТВ

Значок Android TV HAL

Android TV Input Framework (TIF) упрощает доставку живого контента на Android TV. Android TIF предоставляет стандартный API для производителей для создания входных модулей для управления Android TV и позволяет осуществлять поиск и рекомендации живого ТВ с помощью метаданных, опубликованных TV Input.

Фреймворк не стремится внедрять телевизионные стандарты или региональные требования, но упрощает производителям устройств задачу соответствия региональным стандартам цифрового ТВ-вещания без повторной реализации. Документация в этом разделе также может быть полезна сторонним разработчикам приложений, которые хотят создавать собственные входы ТВ.

Компоненты

Реализация Android TV Input Framework включает TV Input Manager. TIF работает с TV App, системным приложением, которое не может быть заменено сторонним приложением, для доступа к встроенным и IP-каналам тюнера. TV App взаимодействует с модулями TV Input, поставляемыми производителем устройства или другими сторонами, через TV Input Manager.

Структура телевизионного ввода состоит из:

  • TV Provider ( com.android.providers.tv.TvProvider ): база данных каналов, программ и связанных с ними разрешений
  • Приложение TV ( com.android.tv.TvActivity ): приложение, которое обрабатывает взаимодействие с пользователем
  • TV Input Manager ( android.media.tv.TvInputManager ): позволяет TV Inputs взаимодействовать с TV App
  • TV Input: приложение, представляющее физические или виртуальные тюнеры и входные порты.
  • TV Input HAL (модуль tv_input ): определение оборудования, которое позволяет системным TV Inputs получать доступ к оборудованию, специфичному для телевизора, при его реализации.
  • Родительский контроль: технология, позволяющая блокировать каналы и программы
  • HDMI-CEC: технология, позволяющая удаленно управлять различными устройствами через HDMI
  • Tuner Framework: фреймворк для встроенного тюнера ТВ-входа
  • MediaCas: фреймворк для условного доступа
  • Менеджер ресурсов тюнера: служба управления аппаратными ресурсами для входа ТВ, MediaCas и входа встроенного тюнера

Эти компоненты подробно описаны ниже. На следующей диаграмме представлен подробный обзор архитектуры Android TV Input Framework.

Обзор архитектуры Android TIF
Рисунок 1. Архитектура Android TV Input Framework (TIF)

Поток

Вот как реализуется архитектура:

  1. Пользователь видит и взаимодействует с приложением TV — системным приложением, которое нельзя заменить сторонним приложением.
  2. Приложение TV отображает AV-контент с входа телевизора.
  3. Приложение TV не может напрямую взаимодействовать с входами TV. Менеджер входов TV определяет состояние входов TV для приложения TV. Подробнее об этих ограничениях см. в разделе Менеджер входов TV ниже.

Разрешения

  • Только входы TV signatureOrSystem и TV App имеют полный доступ к базе данных поставщика ТВ и могут получать KeyEvents.
  • Только системные TV-входы могут получить доступ к TV-входу HAL через службу TV Input Manager. TV-входы доступны один к одному через сеансы TV Input Manager.
  • Сторонние ТВ-входы имеют пакетно-заблокированный доступ к базе данных ТВ-провайдера и могут ЧИТАТЬ/ЗАПИСЫВАТЬ только соответствующие строки пакета.
  • Входы сторонних телевизоров могут отображать либо собственный контент, либо контент с проходных входов телевизора производителя устройства, например HDMI1. Они не могут отображать контент с непроходных входов телевизора, например встроенного или IPTV-тюнера.
  • Разрешение TV_INPUT_HARDWARE для приложения аппаратного входа TV, сигнализирует службе диспетчера входов TV уведомить службу входов TV при загрузке о вызове службы диспетчера входов TV и добавлении ее входов TV. Это разрешение позволяет приложению аппаратного входа TV поддерживать несколько входов TV на службу входов TV, а также динамически добавлять и удалять поддерживаемые ею входы TV.

Провайдер ТВ

База данных TV Provider хранит каналы и программы из TV Inputs. TV Provider также публикует и управляет соответствующими разрешениями, чтобы TV Inputs могли видеть только свои собственные записи. Например, определенный TV Input может видеть только каналы и программы, которые он предоставил, и ему запрещен доступ к каналам и программам любых других TV Inputs.

Поставщик ТВ сопоставляет «жанр вещания» с «каноническим жанром» внутренне. Входы ТВ отвечают за заполнение «жанра вещания» значением в базовом стандарте вещания, а поле «канонический жанр» будет автоматически заполнено правильным связанным жанром из android.provider.TvContract.Genres . Например, при стандарте вещания ATSC A/65 и программе с жанром 0x25 (что означает «Спорт»), вход ТВ заполнит «жанр вещания» строкой «Спорт», а поставщик ТВ заполнит поле «канонический жанр» сопоставленным значением android.provider.TvContract.Genres.SPORTS .

Подробную информацию о провайдере ТВ смотрите на схеме ниже.

Android TV-провайдер
Рисунок 2. Поставщик Android TV

Только приложения в привилегированном системном разделе могут читать всю базу данных ТВ-провайдера.

Сквозные входы телевизора не сохраняют каналы и программы.

В дополнение к стандартным полям для каналов и программ, база данных TV Provider также предлагает поле типа BLOB, COLUMN_INTERNAL_PROVIDER_DATA , в каждой таблице, которую TV Inputs может использовать для хранения произвольных данных. Эти данные BLOB могут включать пользовательскую информацию, такую ​​как частота соответствующего тюнера, и могут быть предоставлены в буфере протокола или другой форме. Поле Searchable доступно для того, чтобы сделать определенные каналы недоступными для поиска (например, для соответствия требованиям страны к защите контента).

Примеры полей базы данных

Поставщик ТВ поддерживает структурированные данные в таблицах каналов ( android.provider.TvContract.Channels ) и программ ( android.provider.TvContract.Programs ). Эти таблицы заполняются и доступны через TV Inputs и системные приложения, такие как TV App. Эти таблицы имеют четыре типа полей:

  • Отображение: поля отображения содержат информацию, которую приложения могут захотеть сделать видимой для пользователя, например, название канала ( COLUMN_DISPLAY_NAME ) или номер ( COLUMN_DISPLAY_NUMBER ), или название просматриваемой программы.
  • Метаданные: существует три поля для идентификации контента согласно соответствующим стандартам, например, идентификатор транспортного потока канала ( COLUMN_TRANSPORT_STREAM_ID ), исходный идентификатор сети ( COLUMN_ORIGINAL_NETWORK_ID ) и идентификатор службы ( COLUMN_SERVICE_ID ).
  • Внутренние данные : поля, предназначенные для пользовательского использования входов ТВ.
    Некоторые поля, такие как COLUMN_INTERNAL_PROVIDER_DATA , представляют собой настраиваемые поля BLOB-типа, в которых входной сигнал ТВ может хранить произвольные метаданные о своем канале или программе.
  • Флаг: поля флага показывают, следует ли ограничить канал для поиска, просмотра или просмотра. Это можно установить только на уровне канала. Все программы подчиняются настройке на канале.
    • COLUMN_SEARCHABLE : Ограничение поиска по некоторым каналам может быть обязательным в определенных регионах. COLUMN_SEARCHABLE = 0 означает, что канал не должен отображаться в результатах поиска.
    • COLUMN_BROWSABLE : Видно только системным приложениям. Ограничение просмотра канала приложениями. COLUMN_BROWSABLE = 0 означает, что канал не должен быть включен в список каналов.
    • COLUMN_LOCKED : Видно только системным приложениям. Ограничение просмотра канала недействительными учетными записями без ввода PIN-кода. COLUMN_LOCKED = 1 означает, что канал должен быть защищен родительским контролем.

Более полный список полей см. в android/frameworks/base/media/java/android/media/tv/TvContract.java

Разрешения и контроль доступа

Все поля видны всем, у кого есть доступ к соответствующей строке. Ни одно поле не доступно напрямую пользователям; они видят только то, что показывают TV App, System apps или TV Inputs.

  • Каждая строка имеет PACKAGE_NAME , пакет (приложение), которому принадлежит эта строка, проверенный на Query, Insert, Update через TvProvider.java. TV Input может получить доступ только к информации, которую он записал, и отделен от информации, предоставляемой другими TV Input.
  • Разрешения на ЧТЕНИЕ и ЗАПИСЬ через AndroidManifest.xml (требуется согласие пользователя) для определения доступных каналов.
  • Только приложения signatureOrSystem могут получить разрешение ACCESS_ALL_EPG_DATA для доступа ко всей базе данных.

Менеджер ТВ-входов

TV Input Manager предоставляет центральный системный API для всей Android TV Input Framework. Он управляет взаимодействием между приложениями и TV Inputs и обеспечивает функциональность родительского контроля. Сеансы TV Input Manager должны создаваться один к одному с TV Inputs. TV Input Manager позволяет получить доступ к установленным TV Inputs, чтобы приложения могли:

  • Перечислите входы ТВ и проверьте их статус
  • Создавайте сеансы и управляйте слушателями

Для сеансов ТВ-вход может быть настроен ТВ-приложением только на URI, которые оно добавило в базу данных ТВ-провайдера, за исключением проходных ТВ-входов, которые можно настроить с помощью TvContract.buildChannelUriForPassthroughInput() . ТВ-вход также может иметь установленную громкость. ТВ-входы, предоставленные и подписанные производителем устройства (приложения-подписи) или другие приложения, установленные в системном разделе, будут иметь доступ ко всей базе данных ТВ-провайдера. Этот доступ можно использовать для создания приложений для просмотра и поиска по всем доступным ТВ-каналам и программам.

Приложение может создать и зарегистрировать TvInputCallback с помощью android.media.tv.TvInputManager для обратного вызова при изменении состояния TV Input или при добавлении или удалении TV Input. Например, TV App может реагировать на отключение TV Input, отображая его как отключенный и предотвращая его выбор.

TV Input Manager абстрагирует связь между TV App и TV Inputs. Стандартный интерфейс TV Input Manager и TV Input позволяет нескольким производителям устройств создавать собственные TV Apps, помогая всем сторонним TV Inputs работать со всеми TV Apps.

ТВ-входы

TV Inputs — это приложения Android в том смысле, что у них есть AndroidManifest.xml и они устанавливаются (через Play, предварительно установлены или загружены из сторонних источников). Android TV поддерживает предустановленные системные приложения, приложения, подписанные производителем устройства, и сторонние TV Inputs.

Некоторые входы, такие как вход HDMI или встроенный вход тюнера, могут быть предоставлены только производителем, поскольку они напрямую общаются с базовым оборудованием. Другие, такие как IPTV, смещение места и внешний STB, могут быть предоставлены третьими лицами в виде APK в Google Play Store. После загрузки и установки новый вход можно выбрать в приложении TV.

Пример сквозного ввода

Вход для системы Android TV
Рисунок 3. Вход системы Android TV

В этом примере TV Input, предоставленный производителем устройства, является доверенным и имеет полный доступ к TV Provider. Как сквозной TV Input, он не регистрирует никаких каналов или программ у TV Provider. Чтобы получить URI, используемый для ссылки на сквозной вход, используйте метод утилиты android.media.tv.TvContract buildChannelUriForPassthroughInput(String inputId) . TV App взаимодействует с TV Input Manager для доступа к HDMI TV Input.

Пример встроенного тюнера

Встроенный тюнер Android TV
Рисунок 4. Вход встроенного тюнера Android TV

В этом примере встроенный ТВ-вход тюнера, предоставленный производителем устройства, является доверенным и имеет полный доступ к провайдеру ТВ.

Пример стороннего ввода

Вход сторонних устройств Android TV
Рисунок 5. Сторонний вход Android TV

В этом примере внешний вход STB TV предоставлен третьей стороной. Поскольку этот вход TV не может напрямую получить доступ к входящему видеосигналу HDMI, он должен пройти через диспетчер входов TV и использовать вход HDMI TV, предоставленный производителем устройства.

Через TV Input Manager внешний вход STB TV может взаимодействовать с входом HDMI TV и запрашивать у него показ видео на HDMI1. Таким образом, вход STB TV может управлять телевизором, в то время как предоставленный производителем вход HDMI TV будет отображать видео.

Пример «картинка в картинке» (PIP)

Ключевые события Android TV
Рисунок 6. Ключевые события Android TV

На схеме выше показано, как кнопки на пульте дистанционного управления передаются на определенный вход телевизора для отображения картинки в картинке (PIP). Эти нажатия кнопок интерпретируются аппаратным драйвером, предоставленным производителем устройства, преобразующим аппаратные скан-коды в коды клавиш Android и передающим их в стандартный конвейер ввода Android InputReader и InputDispatcher как функции KeyEvents . Они, в свою очередь, запускают события в приложении TV, если оно находится в фокусе.

Только системные TV Inputs имеют право получать InputEvents и только если у них есть системное разрешение RECEIVE_INPUT_EVENT . TV Input отвечает за определение того, какие InputEvents потреблять, и должен разрешить TV App обрабатывать ключи, которые ему не нужно потреблять.

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

Пример ввода MHEG-5

На следующей диаграмме показано более подробное представление того, как KeyEvents маршрутизируются через Android TIF.

Пример красной кнопки на Android TV
Рисунок 7. Пример красной кнопки Android TV

На нем изображен поток приложения Red button, распространенного в Европе для предоставления пользователям доступа к интерактивным приложениям на их телевизорах. Приложение может быть доставлено по этому транспортному потоку. При нажатии кнопки пользователи могут взаимодействовать с этими приложениями вещания. Например, вы можете использовать эти приложения вещания для доступа к связанным веб-страницам или спортивным результатам.

Чтобы узнать, как приложения для вещания взаимодействуют с приложением TV, см. раздел «Приложение для вещания» .

В этом примере:

  1. Приложение TV находится в фокусе и получает все ключи.
  2. KeyEvents (например, красная кнопка) передается на активный вход телевизора как InputEvents.
  3. Системный ТВ-вход интегрируется со стеком MHEG-5 и имеет системное разрешение RECEIVE_INPUT_EVENT .
  4. При получении кода активации (например, красной кнопки) ТВ-вход активирует приложение вещания.
  5. Вход ТВ потребляет KeyEvents как InputEvents , а приложение вещания находится в фокусе и обрабатывает InputEvents до тех пор, пока не будет закрыто.

Примечание : входы для ТВ сторонних производителей никогда не принимают ключи.

ТВ вход HAL

TV Input HAL помогает разработке TV Inputs для доступа к оборудованию, специфичному для телевизора. Как и в случае с другими Android HAL, TV Input HAL ( tv_input ) доступен в исходном дереве AOSP, и поставщик разрабатывает его реализацию.

Примечание : Начиная с Android 14, интерфейс HAL для входа телевизора определяется с помощью AIDL .

ТВ-приложение

Системное приложение TV представляет пользователю контент живого телевидения. Справочное приложение TV (Live TV) предоставляется вместе с платформой Android, которое может использоваться как есть, настраиваться, расширяться или заменяться производителями устройств. Исходный код доступен в Android Open Source Project, и вы можете начать работу с ним в статье Reference TV app .

Производители устройств могут расширять свои ТВ-приложения для реализации функций, специфичных для производителя устройства или страны, однако это не входит в сферу действия TIF или эталонного ТВ-приложения.

Как минимум, системное ТВ-приложение должно выполнять следующие задачи:

Настройка и конфигурирование

  • Автоматическое определение входов ТВ
  • Позвольте TV Inputs инициировать настройку канала
  • Управлять родительскими настройками
  • Редактировать каналы

Просмотр

  • Доступ и навигация по всем телеканалам
  • Доступ к панели информации о телепрограмме
  • Отображение данных электронного программирования передач (EPG)
  • Поддержка нескольких аудиодорожек и дорожек субтитров
  • Поставка родительского контроля PIN-кода для проверки
  • Разрешить наложение пользовательского интерфейса входа ТВ для стандарта ТВ (HbbTV и т. д.)
  • Заполнение результатов поиска телеканалов и программ
  • Отображение карточек привязки приложений
  • Поддержка API сдвига во времени
  • Управление функциями DVR и поддержка API записи ТВ

Этот набор функций будет расширяться в соответствии с новыми версиями Android, в которых расширены API TIF платформы. CTS Verifier обеспечивает покрытие тестами на совместимость.

Поддержка сторонних ТВ-входов

Android TV предоставляет API-интерфейсы разработчика для сторонних входов ТВ, позволяя установленным приложениям доставлять программные каналы в опыт прямого эфира. Чтобы обеспечить совместимую реализацию на устройстве Android, системное приложение TV App имеет некоторые обязанности относительно отображения сторонних входов ТВ и каналов для пользователя. Справочное приложение Live TV предоставляет совместимую реализацию; при замене системного приложения TV App производители устройств должны гарантировать, что их собственные приложения обеспечивают аналогичную совместимость, чтобы соответствовать ожиданиям разработчиков на всех устройствах Android TV.

Системное приложение TV должно отображать сторонние входы наряду с сервисом прямого эфира устройства по умолчанию. API-интерфейсы разработчиков обещают, что пользователи смогут находить каналы (после установки) в рамках своего стандартного опыта использования ТВ.

Визуальное различие между встроенными каналами и сторонними каналами допускается, как определено в разделе «Приложение для ТВ» в CDD для Android.

В следующих разделах показано, как приложение Live TV выполняет требования CDD.

Новая настройка канала

Добавление новых сторонних входов/каналов начинается с того, что пользователь находит и устанавливает вход для телевизора из магазина приложений, например Google Play.

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

В базовом приложении Live TV предусмотрено меню «Источники каналов» для доступа к входам.

Перейти в настройки
Рисунок 8. Перейдите в Настройки .

Перейдите в раздел «Источник канала» в настройках.
Рисунок 9. Перейдите в раздел «Источники каналов» в настройках.

Выберите источник из списка.
Рисунок 10. Выберите источник из списка.

Добавьте каналы из вашего источника
Рисунок 11. Добавьте каналы из вашего источника.

Кроме того, после установки нового TvInput в верхней части меню приложения TV отображается карточка с уведомлением, позволяющая пользователю перейти непосредственно к настройкам:

Уведомление о доступности новых источников каналов.
Рисунок 12. Уведомление о доступности новых источников каналов.

Если пользователь предпринимает действия с помощью уведомления, он может выбрать настройку своих источников, как показано на рисунке 10.

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

Настройте список каналов

Производители устройств могут предоставлять пользовательский интерфейс для скрытия определенных каналов и предоставления пользователям возможности управлять собственными EPG. Live TV включает эту возможность.

Откройте список каналов в Настройках.
Рисунок 13. Откройте список каналов в Настройках .

Настройте свой список каналов.
Рисунок 14. Настройте свой список каналов.

ЭПГ

Разработчики сторонних входов должны быть уверены в том, что пользователи смогут легко переходить к своим каналам во время обычного использования на всех совместимых устройствах Android TV.

Каналы от сторонних источников должны быть представлены как часть стандартного EPG для живого телевидения на устройстве. Можно использовать визуальное разделение или отдельные категории для сторонних каналов (см. раздел «Приложение ТВ» в CDD Android) — главное, чтобы пользователи могли находить установленные ими каналы.

Производители должны реализовать приложение TV, чтобы включить результаты поиска для глобальных поисковых запросов, чтобы обеспечить наилучший пользовательский опыт. Live TV предоставляет реализацию (см. , которая предоставляет результаты из сторонних входов (требуется для совместимости платформы), а также встроенных входов.

Сдвиг во времени

Для устройств на Android 6.0 и выше приложение TV должно поддерживать API-интерфейсы Android Framework Time Shifting . Кроме того, производители должны реализовать элементы управления воспроизведением в приложении TV, которые позволяют пользователям приостанавливать, возобновлять, перематывать и перематывать воспроизведение.

Для входов ТВ, поддерживающих функцию сдвига во времени, в приложении ТВ должны отображаться элементы управления воспроизведением.

Управление воспроизведением
Рисунок 15. Элементы управления воспроизведением

Цифровой видеорегистратор

Для устройств на базе Android 7.0 и выше приложение TV должно поддерживать API записи ТВ-программ платформы Android для поддержки, отображения и воспроизведения записанных программ.

Это позволяет производителям устройств подключать свои подсистемы DVR к TIF и значительно сокращать усилия по интеграции, необходимые для включения или интеграции функциональности DVR на телевизионном устройстве. Это также позволяет третьим сторонам предоставлять системы DVR для вторичного рынка, которые можно подключать к устройству Android TV.

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

Приложения для ТВ также могут реализовывать более сложную логику, например, спрашивать пользователя, хочет ли он записать все будущие эпизоды сериала, когда он запрашивает запись одного эпизода.

На следующей схеме показана возможная реализация DVR в Android TV.

Цифровая видеозапись в Android TV
Рисунок 16. Цифровая видеозапись в Android TV

  1. Служба ввода ТВ сообщает приложению ТВ, сколько тюнеров доступно, чтобы приложение ТВ могло справиться с возможным конфликтом ресурсов.
  2. Приложение TV получает инициированный пользователем запрос на запись телепрограммы.
  3. Приложение TV сохраняет расписание записи во внутренней базе данных.
  4. Когда приходит время записи, приложение TV отправляет запрос на настройку канала, связанного с записью.
  5. Служба ввода ТВ получает этот запрос, отвечает, имеются ли соответствующие ресурсы, и настраивается на канал.
  6. Затем приложение TV передает запрос на начало записи в TV Input Manager.
  7. Служба ввода ТВ получает этот запрос и начинает запись.
  8. Служба TV Input Service сохраняет фактические видеоданные в своем хранилище, которое может быть внешним хранилищем или облачным хранилищем.
  9. Когда приходит время закончить запись, приложение TV App передает запрос на остановку записи в TV Input Manager.
  10. Получив запрос, служба ввода ТВ останавливает запись и добавляет связанные с ней метаданные к поставщику ТВ, чтобы приложение ТВ могло показывать запись пользователям по запросу.

Дополнительную информацию о реализации функций записи в службе ТВ-входа см. в этой статье «Запись ТВ» .

Полезные ресурсы

  • Android CDD и документированные API-интерфейсы разработчиков являются окончательными источниками информации.
  • CTS Verifier использует API в рамках программы тестирования совместимости. Запуск этого на Live TV может быть полезным способом увидеть EPG, поиск, родительский контроль и другие требования в контексте сторонних входов.
  • Ознакомьтесь с разделом «Определение службы входных данных для телевизора», чтобы узнать о ожиданиях разработчиков в этой области.

Родительский контроль

Родительский контроль позволяет пользователю блокировать нежелательные каналы и программы, но обойти блокировку можно, введя PIN-код.

Ответственность за функциональность родительского контроля разделена между приложением TV, службой TV Input Manager, поставщиком TV и TV Input.

Родительский контроль является обязательным и регулируется CTS Verifier.

В ряде стран определены системы рейтингов, которые TV Inputs могут использовать через API TVContentRating . Кроме того, TV Inputs могут регистрировать свои собственные системы рейтингов, как показано в тесте CTS Verifier, который вводит «поддельный» рейтинг. Для стран, где существует стандартная система рейтингов, производителям устройств рекомендуется объединять родительский контроль TV Input Framework с любыми другими механизмами, которые они могут включить.

ТВ провайдер

Каждая строка канала имеет поле COLUMN_LOCKED , которое используется для блокировки просмотра определенных каналов без ввода PIN-кода. Программное поле COLUMN_CONTENT_RATING предназначено для отображения и не используется для обеспечения родительского контроля.

Менеджер ТВ-входов

TV Input Manager сохраняет все заблокированные TvContentRating и отвечает на isRatingBlocked() , чтобы сообщить, следует ли блокировать контент с указанным рейтингом.

ТВ-вход

TV Input проверяет, следует ли блокировать текущий контент, вызывая isRatingBlocked() в TV Input Manager, когда рейтинг отображаемого контента изменился (при смене программы или канала) или изменились настройки родительского контроля (при ACTION_BLOCKED_RATINGS_CHANGED и ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED ). Если контент должен быть заблокирован, TV Input отключает аудио и видео и уведомляет приложение TV о том, что текущий контент заблокирован, вызывая notifyContentBlocked(TvContentRating) . Если контент не должен быть заблокирован, TV Input включает аудио и видео и уведомляет приложение TV о том, что текущий контент разрешен, вызывая notifyContentAllowed() .

ТВ-приложение

Чтобы обеспечить поддержку API родительского контроля и, следовательно, создать совместимую платформу, системное телевизионное приложение должно предоставлять пользователям возможность управлять родительским контролем, в том числе для любых пользовательских рейтингов, зарегистрированных определенными приложениями.

Приложение TV отображает пользовательский интерфейс с PIN-кодом, когда получает уведомление от входа телевизора о том, что текущий контент заблокирован, или когда пользователь пытается просмотреть заблокированный канал.

Приложение TV не сохраняет напрямую настройки родительского контроля. Когда пользователь меняет настройки родительского контроля, каждый заблокированный TvContentRating сохраняется диспетчером входов TV, а заблокированные каналы сохраняются поставщиком TV.

Для изменения настроек родительского контроля приложению TV необходимо объявить разрешение android.permission.MODIFY_PARENTAL_CONTROLS .

Производителям устройств рекомендуется:

  • Проведите тестирование родительского контроля CTS Verifier на эталонном приложении Live TV для демонстрации требований совместимости.
  • Использовать приложение Live TV в качестве справочного материала для собственного приложения TV: в частности, см. источник ContentRatingsManager и RatingSystemsFragment , а также то, как они обрабатывают пользовательские рейтинги.

HDMI-CEC

HDMI-CEC позволяет одному устройству управлять другим, тем самым позволяя одному пульту ДУ управлять несколькими приборами в домашнем кинотеатре. Он используется Android TV для ускорения настройки и позволяет дистанционно управлять различными входами телевизора через центральное приложение TV. Например, он может переключать входы, включать или выключать устройства и многое другое.

Android TIF реализует HDMI-CEC как HDMI Control Service, так что производителям устройств нужно просто разработать низкоуровневые драйверы, которые взаимодействуют с облегченным Android TV HAL, пропуская более сложную бизнес-логику. Предоставляя стандартную реализацию, Android стремится смягчить проблемы совместимости за счет сокращения фрагментированных реализаций и выборочной поддержки функций. HDMI Control Service использует существующие службы Android, включая вход и питание.

Это означает, что существующие реализации HDMI-CEC необходимо будет переработать для взаимодействия с Android TIF. Мы рекомендуем, чтобы аппаратная платформа содержала микропроцессор для получения команд CEC power on и других команд.

Интеграция CEC на Android TV
Рисунок 17. Интеграция CEC на Android TV

  1. Шина CEC получает команду от текущего активного источника на переключение на другой источник.
  2. Драйвер передает команду HDMI-CEC HAL.
  3. HAL уведомляет все ActiveSourceChangeListeners .
  4. Служба управления HDMI уведомляется об изменении источника через ActiveSourceChangeListener .
  5. Служба TV Input Manager генерирует намерение для приложения TV переключить источник.
  6. Затем приложение TV создает сеанс TV Input Manager для переключаемого входа TV и вызывает setMain для этого сеанса.
  7. Сеанс диспетчера входов телевизора передает эту информацию на вход HDMI телевизора.
  8. Вход HDMI TV запрашивает установку боковой полосы.
  9. Служба TV Input Manager генерирует соответствующую команду управления маршрутизацией обратно в службу управления HDMI при настройке поверхности.

Руководство по интеграции ТВ

Приложение для трансляции

Поскольку в каждой стране существуют особые требования к вещанию (MHEG, телетекст, HbbTV и т. д.), от производителей ожидается предоставление собственных решений для приложений вещания, например:

  • MHEG: собственный стек
  • Телетекст: собственный стек
  • HbbTV: решение HbbTV от Vewd Software

В выпуске Android L Android TV ожидает, что производители устройств будут использовать системных интеграторов или решения Android для региональных телевизионных стеков, передавать поверхность телевизионным программным стекам или передавать необходимый ключевой код для взаимодействия с устаревшими стеками.

Вот как взаимодействуют приложение для вещания и приложение для телевидения:

  1. Приложение TV находится в фокусе и получает все ключи.
  2. Приложение для телевизора передает ключи (например, красную кнопку) на входное устройство телевизора.
  3. Устройство ввода ТВ внутренне интегрируется с устаревшим телевизионным стеком.
  4. При получении кода активации (например, красной кнопки) устройство ввода телевизора активирует приложения вещания.
  5. Приложение для трансляции берет на себя фокус в приложении TV и обрабатывает действия пользователя.

Для голосового поиска/рекомендаций приложение вещания может поддерживать функцию поиска в приложении для голосового поиска.