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

Значок Android TV HAL

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

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

Составные части

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

Платформа ТВ-ввода состоит из:

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

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

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

Поток

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

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

Разрешения

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

ТВ провайдер

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

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

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

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

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

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

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

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

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

  • Отображение. Поля отображения содержат информацию, которую приложения могут захотеть сделать видимой для пользователя, например название канала ( 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, системных приложениях или TV Inputs.

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

Диспетчер ввода ТВ

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

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

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

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

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

ТВ-входы

TV Inputs — это приложения для 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) . Приложение TV связывается с TV Input Manager, чтобы получить доступ к входу HDMI TV.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ТВ-вход HAL

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

Приложение для ТВ

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

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

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

Установка и конфигурация

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

Viewing

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

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

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

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

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

Разрешено визуальное различие между встроенными каналами и сторонними каналами, как определено в разделе приложения TV на 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

В ряде стран определены рейтинговые системы, которые TV Inputs могут использовать через TVContentRating API . Кроме того, ТВ-входы могут регистрировать свои собственные рейтинговые системы, как показано в тесте 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 ) . Если контент должен быть заблокирован, ТВ-вход отключает звук и видео и уведомляет ТВ-приложение о том, что текущий контент заблокирован, вызывая notifyContentBlocked(TvContentRating) . Если контент не должен быть заблокирован, ТВ-вход включает аудио и видео и уведомляет ТВ-приложение о том, что текущий контент разрешен, вызывая notifyContentAllowed() .

Приложение для ТВ

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

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

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

Приложение 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, поэтому производителям устройств просто нужно разработать низкоуровневые драйверы, взаимодействующие с облегченным 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 создает сеанс TV Input Manager для переключаемого TV-входа и вызывает setMain для этого сеанса.
  7. Сеанс управления вводом ТВ передает эту информацию на вход HDMI TV.
  8. Вход HDMI TV запрашивает установку поверхности боковой полосы.
  9. Служба диспетчера ввода ТВ генерирует соответствующую команду управления маршрутизацией обратно в службу управления HDMI, когда поверхность настроена.

Рекомендации по интеграции с телевизором

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

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

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

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

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

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

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