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

Значок Android TV HAL

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

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

Компоненты

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

Структура ТВ-входа состоит из:

  • ТВ-провайдер ( com.android.providers.tv.TvProvider ): база данных каналов, программ и связанных с ними разрешений.
  • TV App ( com.android.tv.TvActivity ): приложение, которое обрабатывает взаимодействие с пользователем.
  • Диспетчер ТВ-входов ( android.media.tv.TvInputManager ): позволяет ТВ-входам взаимодействовать с ТВ-приложением.
  • ТВ-вход: приложение, представляющее физические или виртуальные тюнеры и входные порты.
  • ТВ-вход HAL (модуль tv_input ): определение оборудования, которое позволяет системным ТВ-входам получать доступ к оборудованию, специфичному для телевизора, при его реализации.
  • Родительский контроль: технология, позволяющая блокировать каналы и программы.
  • 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. ТВ-приложение не может напрямую взаимодействовать с ТВ-входами. Диспетчер ТВ-входов определяет состояние ТВ-входов для ТВ-приложения. Дополнительные сведения об этих ограничениях см. ниже в разделе «Диспетчер ТВ-входа» .

Разрешения

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

ТВ-провайдер

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

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

См. диаграмму ниже для детального представления ТВ-провайдера.

Поставщик Android-телевидения
Рисунок 2. Поставщик Android TV

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

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

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

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

Поставщик ТВ поддерживает структурированные данные в таблицах каналов ( android.provider.TvContract.Channels ) и программ ( android.provider.TvContract.Programs ). Эти таблицы заполняются и доступны для ТВ-входов и системных приложений, таких как 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

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

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

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

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

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

  • Список входов телевизора и проверка их статуса
  • Создавайте сеансы и управляйте прослушивателями

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

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

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

ТВ-входы

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

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

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

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

В этом примере ТВ-вход, предоставленный производителем устройства, является доверенным и имеет полный доступ к ТВ-провайдеру. Будучи сквозным ТВ-входом, он не регистрирует какие-либо каналы или программы у ТВ-провайдера. Чтобы получить URI, используемый для ссылки на сквозной ввод, используйте служебный метод android.media.tv.TvContract buildChannelUriForPassthroughInput(String inputId) . Приложение ТВ взаимодействует с диспетчером ТВ-входа для доступа к ТВ-входу HDMI.

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

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

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

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

Сторонний вход для Android TV
Рис. 5. Сторонний вход Android TV

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

С помощью диспетчера ТВ-входа внешний ТВ-вход STB может взаимодействовать с ТВ-входом HDMI и запрашивать показ видео на HDMI1. Таким образом, ТВ-вход STB может управлять телевизором, в то время как предоставленный производителем ТВ-вход HDMI воспроизводит видео.

Пример изображения «Картинка в картинке» (PIP)

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

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

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

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

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

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

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

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

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

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

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

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

ТВ-вход HAL

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

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

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

Системное ТВ-приложение представляет пользователю телетрансляцию в прямом эфире. Эталонное ТВ-приложение (Live TV) предоставляется вместе с платформой Android, которое может использоваться как есть, настраивать, расширяться или заменяться производителями устройств. Исходный код доступен в проекте Android с открытым исходным кодом, и вы можете начать работу с ним в статье о приложении Reference TV .

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

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

Настройка и конфигурация

  • Автоматическое определение ТВ-входов
  • Разрешить ТВ-входам инициировать настройку канала
  • Контроль родительских настроек
  • Редактировать каналы

Viewing

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

электронная программа передач

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

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

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

Временной сдвиг

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

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

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

Видеорегистратор

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

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

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

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

На следующей диаграмме представлена ​​возможная реализация цифрового видеорегистратора в Android TV.

Запись цифрового видео на Android TV
Рисунок 16. Запись цифрового видео в Android TV

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

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

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

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

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

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

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

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

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

ТВ-провайдер

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

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

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

ТВ-вход

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

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

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

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

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

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

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

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

HDMI-CEC

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

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

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

Интеграция 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 создает сеанс диспетчера ТВ-входа для переключаемого ТВ-входа и вызывает 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 и обрабатывает действия пользователя.

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