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

Значок 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 или эталонного ТВ-приложения.

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

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

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

Просмотр

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

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

, Значок 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 (что означает «спорт»), телевизионный ввод заполняет «вещательный жанр» с помощью строки «Sports», а телевизионный поставщик заполняет поле «Canonical жанр» с помощью сопоставленного значения android.provider.TvContract.Genres.SPORTS .

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

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

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

Входные данные о прохождении телевизора не хранят каналы и программы.

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

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

ТВ -провайдер поддерживает структурированные данные в канале ( 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

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

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

  • В каждой строке есть PACKAGE_NAME , пакет (приложение), которому принадлежит эта строка, проверяется на запросе, вставьте, обновляется через tvprovider.java. Вход телевизора может получить доступ только к информации, которую он написал, и оцеплен из информации, предоставленной другими входами телевизора.
  • Читать, написать разрешения через AndroidManifest.xml (требует согласия пользователя) для определения доступных каналов.
  • Только приложения signatureOrSystem могут получить разрешение на доступ ACCESS_ALL_EPG_DATA для доступа к всей базе данных.

Менеджер ввода телевидения

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

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

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

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

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

Телевизионные входы

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

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

Пример ввода прохождения

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

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

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

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

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

Сторонний входной пример

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

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

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

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

Android TV Keyevents
Рисунок 6. Android TV Keyevents

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

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

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

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

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

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

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

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

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

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

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

Телевизионный вход HAL

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

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

Телевизионное приложение

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

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

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

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

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

Просмотр

  • Доступ и перемещайте все телеканалы
  • Доступ к телевизионной программе информационной панели
  • Отображение данных Электронного программирования (EPG)
  • Поддерживать несколько треков аудио и субтитров
  • Задача Parental Control Pint Pint
  • Разрешить наложение пользовательского интерфейса телевизора для стандарта телевидения (HBBTV и т. Д.)
  • Заполнить результаты поиска для телевизионных каналов и программ
  • Отображать приложения для связывания карт
  • Поддержка TIMEFITING API
  • Обработка функциональности DVR и поддержки TV APIS

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

Поддержка сторонних телевизоров

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

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

Визуальная дифференциация между встроенными каналами и сторонними каналами разрешена, как определено в разделе приложения телевизора CDD Android.

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

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

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

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

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

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

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

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

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

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

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

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

См. Определите свой сервис ввода телевизора для ожиданий разработчиков в этой области.

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

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

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

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

Эпг

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

Каналы от сторонних входов должны быть представлены в рамках стандартного живого телевизионного опыта устройства EPG. Визуальное разделение или отдельные категории для сторонних каналов могут быть использованы (см. Раздел приложения телевизора Android CDD)-что является ключом, что пользователи могут найти установленные ими каналы.

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

Смену времени

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

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

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

Кадр

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Телевизионный провайдер

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

Менеджер ввода телевидения

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

Телевизионный вход

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

Телевизионное приложение

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

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

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

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

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

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

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

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

Вещательное приложение

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

  • MHEG: нативный стек
  • Teletext: Native Stack
  • HBBTV: решение HBBTV от программного обеспечения VEWD

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

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

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

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