
Android TV Input Framework (TIF) upraszcza dostarczanie treści na żywo do Android TV. Android TIF zapewnia standardowy interfejs API dla producentów do tworzenia modułów wejściowych do sterowania Android TV oraz umożliwia wyszukiwanie telewizji na żywo i rekomendacje za pośrednictwem metadanych publikowanych przez TV Input.
Ramy nie mają na celu wdrożenia standardów telewizyjnych ani wymogów regionalnych, ale ułatwiają producentom urządzeń spełnienie regionalnych standardów transmisji telewizji cyfrowej bez ponownego wdrażania. Dokumentacja w tej sekcji może być również przydatna dla twórców aplikacji innych firm, którzy chcą tworzyć niestandardowe wejścia telewizyjne.
składniki
Implementacja Android TV Input Framework obejmuje Menedżera wprowadzania TV. TIF współpracuje z aplikacją TV, aplikacją systemową, której nie można zastąpić aplikacją innej firmy, w celu uzyskania dostępu do kanałów wbudowanych i tunera IP. Aplikacja TV komunikuje się z modułami wejściowymi TV dostarczonymi przez producenta urządzenia lub inne strony za pośrednictwem Menedżera wejść TV.
Struktura wprowadzania TV składa się z:
- Dostawca telewizji (
com.android.providers.tv.TvProvider
): baza danych kanałów, programów i powiązanych uprawnień - Aplikacja TV (
com.android.tv.TvActivity
): aplikacja obsługująca interakcję użytkownika - TV Input Manager (
android.media.tv.TvInputManager
): umożliwia komunikację wejść TV z aplikacją TV - TV Input: aplikacja reprezentująca fizyczne lub wirtualne tunery i porty wejściowe
- TV Input HAL (moduł
tv_input
): definicja sprzętowa, która umożliwia systemowym wejściom telewizyjnym dostęp do sprzętu specyficznego dla telewizora po zaimplementowaniu - Kontrola rodzicielska: technologia umożliwiająca blokowanie kanałów i programów
- HDMI-CEC: technologia umożliwiająca zdalne sterowanie różnymi urządzeniami przez HDMI
- Tuner Framework: framework dla wbudowanego tunera telewizyjnego
- MediaCas: ramy dostępu warunkowego
- Menedżer zasobów tunera: usługa do zarządzania zasobami sprzętowymi dla wejścia TV, MediaCas i wejścia wbudowanego tunera
Te komponenty są szczegółowo omówione poniżej. Zobacz poniższy diagram, aby zobaczyć szczegółowy widok architektury Android TV Input Framework.

Przepływ
Oto jak wykonywana jest architektura:
- Użytkownik widzi i wchodzi w interakcje z aplikacją TV, aplikacją systemową, której nie można zastąpić aplikacją innej firmy.
- Aplikacja TV wyświetla zawartość AV z wejścia TV.
- Aplikacja TV nie może komunikować się bezpośrednio z wejściami TV. Menedżer wejść TV identyfikuje stan wejść TV dla aplikacji TV. Więcej informacji na temat tych ograniczeń można znaleźć w Menedżerze wejść TV poniżej.
Uprawnienia
- Tylko
signatureOrSystem
TV Inputs i TV App mają pełny dostęp do bazy danych dostawców TV i mogą odbierać KeyEvents. - Tylko systemowe wejścia TV mają dostęp do HAL wejścia TV za pośrednictwem usługi TV Input Manager. Wejścia TV są dostępne bezpośrednio za pośrednictwem sesji TV Input Manager.
- Wejścia telewizyjne innych firm mają dostęp do bazy danych dostawcy telewizji z blokadą pakietu i mogą ODCZYTAĆ/ZAPISAĆ tylko pasujące wiersze pakietu.
- Wejścia telewizyjne innych firm mogą wyświetlać własne treści lub treści z wejść telewizyjnych przekazywanych przez producenta urządzenia, takich jak HDMI1. Nie mogą wyświetlać treści z nieprzepuszczalnych wejść telewizyjnych, takich jak wbudowany tuner lub tuner IPTV.
- Uprawnienie
TV_INPUT_HARDWARE
dla sprzętowej aplikacji TV Input sygnalizuje usłudze TV Input Manager, aby powiadomiła usługę TV Input podczas uruchamiania, aby wywołała usługę TV Input Manager i dodała swoje wejścia telewizyjne. To uprawnienie umożliwia sprzętowej aplikacji TV Input obsługę wielu wejść TV na usługę TV Input, a także dynamiczne dodawanie i usuwanie obsługiwanych wejść TV.
Dostawca telewizji
Baza danych dostawcy telewizji przechowuje kanały i programy z wejść telewizyjnych. Dostawca TV publikuje również powiązane uprawnienia i zarządza nimi, dzięki czemu TV Inputs może przeglądać tylko własne nagrania. Na przykład określone wejście TV widzi tylko kanały i programy, które dostarczyło i nie ma dostępu do żadnych innych kanałów i programów wejść TV.
Dostawca telewizji wewnętrznie odwzorowuje „gatunek nadawania” na „gatunek kanoniczny”. Wejścia TV są odpowiedzialne za wypełnienie „gatunku transmisji” wartością w bazowym standardzie emisji, a pole „gatunek kanoniczny” zostanie automatycznie wypełnione odpowiednim powiązanym gatunkiem z android.provider.TvContract.Genres
. Na przykład, w przypadku standardu transmisji ATSC A/65 i programu z gatunkiem 0x25 (co oznacza „Sport”), wejście TV wypełni „gatunek transmisji” ciągiem „Sport”, a dostawca telewizji wypełni pole „gatunek kanoniczny” wartością zmapowana wartość android.provider.TvContract.Genres.SPORTS
.
Zobacz diagram poniżej, aby uzyskać szczegółowy widok dostawcy telewizji.

Tylko aplikacje z uprzywilejowanej partycji systemowej mogą odczytywać całą bazę danych dostawcy telewizji.
Wejścia telewizji tranzytowej nie przechowują kanałów ani programów.
Oprócz standardowych pól dla kanałów i programów, baza danych dostawcy telewizji oferuje również pole typu BLOB, COLUMN_INTERNAL_PROVIDER_DATA
, w każdej tabeli, której wejścia telewizyjne mogą używać do przechowywania dowolnych danych. Te dane BLOB mogą zawierać niestandardowe informacje, takie jak częstotliwość powiązanego tunera, i mogą być dostarczane w buforze protokołu lub w innej formie. Pole Wyszukiwalne jest dostępne, aby uniemożliwić wyszukiwanie niektórych kanałów (na przykład w celu spełnienia wymagań krajowych dotyczących ochrony treści).
Przykłady pól bazy danych
Dostawca telewizji obsługuje uporządkowane dane w tabelach kanałów ( android.provider.TvContract.Channels
) i programów ( android.provider.TvContract.Programs
). Te tabele są wypełniane i dostępne dla wejść telewizyjnych i aplikacji systemowych, takich jak aplikacja TV. Te tabele mają cztery typy pól:
- Wyświetlacz: pola wyświetlacza zawierają informacje, które aplikacje mogą chcieć uwidocznić użytkownikowi, takie jak nazwa (
COLUMN_DISPLAY_NAME
) lub numer (COLUMN_DISPLAY_NUMBER
) lub tytuł oglądanego programu. - Metadane: Istnieją trzy pola do identyfikacji treści, zgodnie z odpowiednimi standardami, takie jak identyfikator strumienia transportowego kanału (
COLUMN_TRANSPORT_STREAM_ID
), oryginalny identyfikator sieci (COLUMN_ORIGINAL_NETWORK_ID
) i identyfikator usługi (COLUMN_SERVICE_ID
). - Dane wewnętrzne : pola przeznaczone do niestandardowego wykorzystania wejść telewizyjnych.
Niektóre pola, takie jakCOLUMN_INTERNAL_PROVIDER_DATA
, to konfigurowalne pola BLOB, w których TV Input może przechowywać dowolne metadane dotyczące swojego kanału lub programu. - Flaga: Pola flag wskazują, czy kanał powinien być ograniczony do wyszukiwania, przeglądania lub oglądania. Można to ustawić tylko na poziomie kanału. Wszystkie programy podlegają ustawieniu na kanale.
-
COLUMN_SEARCHABLE
: Ograniczenie wyszukiwania z niektórych kanałów może być wymagane w niektórych regionach.COLUMN_SEARCHABLE = 0
oznacza, że kanał nie powinien być widoczny w wynikach wyszukiwania. -
COLUMN_BROWSABLE
: Widoczne tylko dla aplikacji systemowych. Ograniczanie przeglądania kanału przez aplikacje.COLUMN_BROWSABLE = 0
oznacza, że kanał nie powinien znajdować się na liście kanałów. -
COLUMN_LOCKED
: Widoczne tylko dla aplikacji systemowych. Ograniczenie oglądania kanału przez nieprawidłowe konta bez wprowadzania kodu PIN.COLUMN_LOCKED = 1
oznacza, że kanał powinien być chroniony przez kontrolę rodzicielską.
Aby uzyskać bardziej wyczerpującą listę pól, zobacz android/frameworks/base/media/java/android/media/tv/TvContract.java
Uprawnienia i kontrola dostępu
Wszystkie pola są widoczne dla każdego, kto ma dostęp do odpowiedniego wiersza. Żadne pola nie są bezpośrednio dostępne dla użytkowników; widzą tylko to, co wyświetla aplikacja TV, aplikacje systemowe lub wejścia TV.
- Każdy wiersz ma
PACKAGE_NAME
, pakiet (aplikację), który jest właścicielem tego wiersza, sprawdzony w Query, Insert, Update przez TvProvider.java. Wejście telewizyjne może uzyskiwać dostęp tylko do informacji, które zapisało, i jest odgrodzone od informacji dostarczanych przez inne wejścia telewizyjne. - Uprawnienia do ODCZYTU, ZAPISU poprzez AndroidManifest.xml (wymaga zgody użytkownika) w celu określenia dostępnych kanałów.
- Tylko aplikacje
signatureOrSystem
mogą uzyskać dostęp do całej bazy danychACCESS_ALL_EPG_DATA
.
Menedżer wejść telewizyjnych
TV Input Manager zapewnia centralny systemowy interfejs API do ogólnej platformy Android TV Input Framework. Decyduje o interakcjach między aplikacjami a wejściami telewizyjnymi i zapewnia funkcję kontroli rodzicielskiej. Sesje TV Input Manager muszą być tworzone jeden do jednego z TV Inputs. TV Input Manager umożliwia dostęp do zainstalowanych wejść telewizyjnych, dzięki czemu aplikacje mogą:
- Wyświetl listę wejść TV i sprawdź ich stan
- Twórz sesje i zarządzaj słuchaczami
W przypadku sesji Wejście TV może być dostrojone przez Aplikację TV tylko do identyfikatorów URI, które zostały dodane do bazy danych Dostawcy TV, z wyjątkiem przekazywanych Wejść TV, do których można dostroić za pomocą TvContract.buildChannelUriForPassthroughInput()
. Wejście TV może mieć również ustawioną głośność. Wejścia telewizyjne dostarczone i podpisane przez producenta urządzenia (aplikacje sygnaturowe) lub inne aplikacje zainstalowane na partycji systemowej będą miały dostęp do całej bazy danych dostawcy telewizji. Dostęp ten można wykorzystać do konstruowania aplikacji do przeglądania i wyszukiwania we wszystkich dostępnych kanałach i programach telewizyjnych.
Aplikacja może utworzyć i zarejestrować TvInputCallback
za pomocą android.media.tv.TvInputManager
w celu wywołania zwrotnego w przypadku zmiany stanu wejścia telewizyjnego lub dodania lub usunięcia wejścia telewizyjnego. Na przykład aplikacja TV może zareagować, gdy wejście TV zostanie odłączone, wyświetlając je jako odłączone i uniemożliwiając jego wybór.
TV Input Manager wyodrębnia komunikację między aplikacją TV a wejściami TV. Standardowy interfejs TV Input Manager i TV Input pozwala wielu producentom urządzeń na tworzenie własnych aplikacji TV, jednocześnie pomagając wszystkim wejściowym TV innych firm działać we wszystkich aplikacjach TV.
Wejścia telewizyjne
TV Inputs to aplikacje na Androida w tym sensie, że mają plik AndroidManifest.xml i są instalowane (przez Play, wstępnie zainstalowane lub pobrane z boku). Android TV obsługuje preinstalowane aplikacje systemowe, aplikacje sygnowane przez producenta urządzenia oraz wejścia telewizyjne innych firm.
Niektóre wejścia, takie jak wejście HDMI lub wejście wbudowanego tunera, mogą być dostarczane tylko przez producenta, ponieważ komunikują się one bezpośrednio z podstawowym sprzętem. Inne, takie jak IPTV, przenoszenie miejsc i zewnętrzne STB, mogą być dostarczane przez strony trzecie jako pliki APK w sklepie Google Play. Po pobraniu i zainstalowaniu nowe wejście można wybrać w aplikacji TV.
Przykład wejścia tranzytowego

W tym przykładzie wejście TV dostarczone przez producenta urządzenia jest zaufane i ma pełny dostęp do dostawcy TV. Jako przejściowe wejście telewizyjne nie rejestruje żadnych kanałów ani programów u dostawcy telewizji. Aby uzyskać identyfikator URI używany do odwoływania się do wejścia przekazującego, użyj metody narzędziowej android.media.tv.TvContract
buildChannelUriForPassthroughInput(String inputId)
. Aplikacja TV komunikuje się z Menedżerem wejść TV, aby uzyskać dostęp do wejścia HDMI TV.
Przykład wbudowanego tunera

W tym przykładzie wejście telewizyjne wbudowanego tunera dostarczone przez producenta urządzenia jest zaufane i ma pełny dostęp do dostawcy telewizji.
Przykład danych wejściowych firmy zewnętrznej

W tym przykładzie zewnętrzne wejście TV STB jest dostarczane przez stronę trzecią. Ponieważ to wejście TV nie ma bezpośredniego dostępu do przychodzącego strumienia wideo HDMI, musi przejść przez Menedżera wejść TV i korzystać z wejścia HDMI TV dostarczonego przez producenta urządzenia.
Za pośrednictwem Menedżera wejść TV zewnętrzne wejście STB TV może komunikować się z wejściem HDMI TV i poprosić je o pokazanie wideo na HDMI1. Tak więc wejście TV STB może sterować telewizorem, podczas gdy dostarczone przez producenta wejście HDMI TV renderuje wideo.
Przykład obrazu w obrazie (PIP).

Powyższy diagram pokazuje, w jaki sposób przyciski na pilocie zdalnego sterowania są przekazywane do określonego wejścia telewizora w celu wyświetlenia obrazu w obrazie (PIP). Te naciśnięcia przycisków są interpretowane przez sterownik sprzętowy dostarczony przez producenta urządzenia, konwertując sprzętowe kody skanujące na kody klawiszy systemu Android i przekazując je do standardowego potoku wejściowego systemu Android Funkcje InputReader
i InputDispatcher
jako KeyEvents . Te z kolei wyzwalają zdarzenia w aplikacji telewizyjnej, jeśli jest w centrum uwagi.
Tylko systemowe wejścia TV mogą odbierać InputEvents
i tylko wtedy, gdy mają uprawnienie systemowe RECEIVE_INPUT_EVENT
. Wejście telewizyjne jest odpowiedzialne za określenie, które zdarzenia wejściowe mają być używane i powinno umożliwiać aplikacji telewizyjnej obsługę kluczy, których nie musi używać.
Aplikacja TV jest odpowiedzialna za sprawdzenie, który system TV Input jest aktywny, czyli wybrany przez użytkownika, oraz za ujednoznacznienie przychodzących KeyEvents
i przekierowanie ich do właściwej sesji TV Input Manager, wywołując funkcję dispatchInputEvent()
w celu przekazania zdarzenia do powiązanego wejścia TV .
Przykład wejścia MHEG-5
Na poniższym diagramie przedstawiono bardziej szczegółowy widok sposobu, w jaki KeyEvents
są kierowane przez plik TIF systemu Android.

Przedstawia działanie aplikacji z czerwonym przyciskiem, która jest powszechna w Europie i umożliwia użytkownikom dostęp do interaktywnych aplikacji na telewizorach. Aplikacja może być dostarczana przez ten strumień transportowy. Kliknięcie przycisku umożliwia użytkownikom interakcję z tymi aplikacjami do transmisji. Możesz na przykład użyć tych aplikacji do transmisji, aby uzyskać dostęp do powiązanych stron internetowych lub wyników sportowych.
Zobacz sekcję Aplikacja do transmisji , aby dowiedzieć się, jak aplikacje do transmisji wchodzą w interakcję z aplikacją TV.
W tym przykładzie:
- Aplikacja TV jest w centrum uwagi i odbiera wszystkie klucze.
-
KeyEvents
(np. czerwony przycisk) są przekazywane do aktywnego wejścia TV jakoInputEvents.
- Systemowe wejście TV integruje się ze stosem MHEG-5 i posiada uprawnienia systemowe
RECEIVE_INPUT_EVENT
. - Po otrzymaniu kodu aktywacji (np. czerwonego przycisku) wejście TV aktywuje aplikację do transmisji.
- Wejście TV zużywa
KeyEvents
jakoInputEvents
, a aplikacja do transmisji jest w centrum uwagi i obsługujeInputEvents
, dopóki nie zostanie odrzucona.
Uwaga : wejścia telewizyjne innych firm nigdy nie otrzymują kluczy.
Wejście telewizyjne HAL
Wejście TV HAL pomaga w rozwoju wejść TV w celu uzyskania dostępu do sprzętu specyficznego dla telewizora. Podobnie jak w przypadku innych warstw HAL systemu Android, warstwa HAL wejścia TV ( tv_input
) jest dostępna w drzewie źródeł AOSP, a dostawca opracowuje jej implementację.
Aplikacja telewizyjna
Systemowa aplikacja telewizyjna prezentuje użytkownikowi treści telewizyjne na żywo. Wraz z platformą Android dostępna jest referencyjna aplikacja telewizyjna (Live TV), której producenci urządzeń mogą używać w niezmienionej postaci, dostosowywać, rozszerzać lub wymieniać. Kod źródłowy jest dostępny w projekcie Android Open Source Project i możesz zacząć z nim korzystać w artykule dotyczącym aplikacji Reference TV .
Producenci urządzeń mogą rozszerzyć swoje aplikacje telewizyjne, aby zaimplementować funkcje producenta urządzenia lub specyficzne dla kraju, jednak nie jest to objęte zakresem TIF ani referencyjnej aplikacji telewizyjnej.
Systemowa aplikacja TV musi obsługiwać co najmniej następujące zadania:
Instalacja i konfiguracja
- Automatyczne wykrywanie wejść telewizyjnych
- Pozwól wejść TV zainicjować konfigurację kanału
- Kontroluj ustawienia rodzicielskie
- Edytuj kanały
Oglądanie
- Uzyskaj dostęp i poruszaj się po wszystkich kanałach telewizyjnych
- Dostęp do paska informacji o programie telewizyjnym
- Wyświetl dane elektronicznego przewodnika programowego (EPG).
- Obsługa wielu ścieżek audio i napisów
- Dostarcz wyzwanie PIN kontroli rodzicielskiej
- Zezwalaj na nakładkę interfejsu wejścia telewizora dla standardu telewizyjnego (HbbTV itp.)
- Wypełnij wyniki wyszukiwania dla kanałów telewizyjnych i programów
- Wyświetlaj karty łączące aplikacje
- Obsługa interfejsów API przesunięcia w czasie
- Obsługuj funkcje DVR i obsługuj interfejsy API nagrywania telewizji
Ten zestaw funkcji będzie się powiększał wraz z nowymi wersjami systemu Android, w których rozszerzono interfejsy API TIF platformy. CTS Verifier zapewnia zakres testów zgodności.
Obsługa wejść telewizyjnych innych firm
Android TV zapewnia programistyczne interfejsy API dla wejść telewizyjnych innych firm, umożliwiając zainstalowanym aplikacjom dostarczanie kanałów programowych do telewizji na żywo. Aby zapewnić kompatybilną implementację urządzenia z systemem Android, systemowa aplikacja TV ma pewne obowiązki dotyczące udostępniania użytkownikowi wejść i kanałów telewizyjnych innych firm. Referencyjna aplikacja Live TV zapewnia kompatybilną implementację; w przypadku wymiany systemowej aplikacji telewizyjnej producenci urządzeń muszą zadbać o to, aby ich własne aplikacje zapewniały podobną kompatybilność, aby spełnić oczekiwania programistów na wszystkich urządzeniach z systemem Android TV.
Systemowa aplikacja telewizyjna musi wyświetlać dane wejściowe innych firm wraz z domyślną usługą telewizji na żywo na urządzeniu. Obietnicą API dla programistów jest to, że użytkownicy będą mogli znaleźć kanały (po zainstalowaniu) w ramach standardowego doświadczenia telewizyjnego.
Dozwolone jest wizualne rozróżnienie między wbudowanymi kanałami a kanałami innych firm, zgodnie z definicją w sekcji aplikacji TV na Android CDD.
W poniższych sekcjach pokazano, w jaki sposób aplikacja Live TV spełnia wymagania CDD.
Nowa konfiguracja kanałów
Dodawanie nowych wejść/kanałów innych firm rozpoczyna się od znalezienia i zainstalowania wejścia telewizyjnego ze sklepu z aplikacjami, takiego jak Google Play.
Niektóre wejścia telewizyjne innych firm automatycznie dodają kanały do bazy danych TvProvider. Jednak większość z nich zapewni działanie konfiguracyjne, aby umożliwić użytkownikowi skonfigurowanie kanałów, podanie danych logowania i wykonanie innych działań. Systemowa aplikacja telewizyjna musi zapewniać użytkownikowi możliwość aktywowania tej czynności konfiguracyjnej, dlatego CDD wymaga, aby dane wejściowe innych firm były minimalne do czynności związanych z nawigacją z dala od głównej aplikacji telewizyjnej.
Referencyjna aplikacja Telewizja na żywo udostępnia menu Źródła kanałów umożliwiające dostęp do wejść.




Ponadto po zainstalowaniu nowego TvInput w górnej części menu aplikacji telewizyjnej wyświetlana jest karta powiadomienia, która przenosi użytkownika bezpośrednio do konfiguracji:

Jeśli użytkownik podejmie działanie za pośrednictwem powiadomienia, może skonfigurować swoje źródła, jak pokazano na rysunku 10.
Zobacz Definiowanie usługi wejścia telewizyjnego, aby zapoznać się z oczekiwaniami programistów w tej dziedzinie.
Dostosuj listę kanałów
Producenci urządzeń mogą udostępniać interfejs użytkownika w celu ukrycia niektórych kanałów i umożliwienia użytkownikom zarządzania własnymi EPG. Telewizja na żywo obejmuje tę funkcję.


EPG
Programiści zewnętrzni muszą mieć pewność, że użytkownicy mogą łatwo przechodzić do swoich kanałów podczas ogólnego użytkowania, na wszystkich kompatybilnych urządzeniach z Android TV.
Kanały z wejść innych firm muszą być prezentowane jako część standardowego przewodnika telewizyjnego na żywo urządzenia. Można zastosować wizualną separację lub osobne kategorie dla kanałów innych firm (zobacz sekcję aplikacji TV na Android CDD) — najważniejsze jest to, aby użytkownicy mogli znaleźć kanały, które zainstalowali.
Szukaj
Producenci muszą wdrożyć aplikację telewizyjną, aby uwzględniała wyniki wyszukiwania dla żądań wyszukiwania globalnego, aby zapewnić użytkownikom jak najlepsze wrażenia. Telewizja na żywo zapewnia implementację (zobacz , która zapewnia wyniki z danych wejściowych innych firm (wymagane do zgodności z platformą), a także wbudowane dane wejściowe.
Przesunięcie czasu
W przypadku urządzeń z systemem Android 6.0 lub nowszym aplikacja TV musi obsługiwać interfejsy API zmiany czasu w systemie Android . Ponadto producenci muszą zaimplementować sterowanie odtwarzaniem w aplikacji telewizyjnej, które umożliwia użytkownikom wstrzymywanie, wznawianie, przewijanie do tyłu i przewijanie do przodu.
W przypadku wejść telewizyjnych obsługujących funkcję przesunięcia czasowego aplikacja TV musi wyświetlać elementy sterujące odtwarzaniem.

DVR
W przypadku urządzeń z systemem Android 7.0 lub nowszym aplikacja TV musi obsługiwać interfejsy API nagrywania programów telewizyjnych w systemie Android , aby obsługiwać, wyświetlać i odtwarzać nagrane programy.
Pozwala to producentom urządzeń na podłączenie ich podsystemów DVR do TIF i radykalne zmniejszenie wysiłków integracyjnych wymaganych do włączenia lub zintegrowania funkcji DVR na urządzeniu telewizyjnym. Umożliwia również stronom trzecim dostarczanie systemów DVR z rynku wtórnego, które można podłączyć do urządzenia z systemem Android TV.
Oprócz nagrywania treści na żywo aplikacja TV obsługuje również konflikty zasobów. Na przykład, jeśli urządzenie ma dwa tunery, może jednocześnie nagrywać dwa programy. Jeśli użytkownik poprosi o nagranie trzech, aplikacja telewizyjna musi obsłużyć konflikt i powinna wyświetlić powiadomienie lub poprosić użytkownika o zaplanowanie priorytetu dla tych żądań.
Aplikacje TV mogą również implementować bardziej wyrafinowaną logikę, na przykład pytać użytkownika, czy chce nagrać wszystkie przyszłe odcinki serialu, gdy poprosi o nagranie jednego odcinka.
Zobacz poniższy diagram, aby zobaczyć możliwą implementację DVR w Android TV.

- Usługa TV Input informuje aplikację TV, ile tunerów jest dostępnych, aby aplikacja TV mogła obsłużyć ewentualny konflikt zasobów.
- Aplikacja telewizyjna otrzymuje zainicjowane przez użytkownika żądanie nagrania programu telewizyjnego.
- Aplikacja TV przechowuje harmonogram nagrywania w swojej wewnętrznej bazie danych.
- Gdy nadchodzi czas nagrywania, aplikacja TV przekazuje żądanie dostrojenia do kanału powiązanego z nagraniem.
- Usługa wejścia telewizyjnego odbiera to żądanie, odpowiada, czy dostępne są odpowiednie zasoby, i dostraja się do kanału.
- Następnie aplikacja TV przekazuje żądanie rozpoczęcia nagrywania do TV Input Manager.
- Usługa TV Input odbiera to żądanie i rozpoczyna nagrywanie.
- Usługa TV Input przechowuje rzeczywiste dane wideo w swojej pamięci, która może być pamięcią zewnętrzną lub chmurą.
- Kiedy nadszedł czas, aby zakończyć nagrywanie, aplikacja TV przekazuje żądanie zatrzymania nagrywania do TV Input Manager.
- Gdy usługa TV Input Service otrzyma żądanie, zatrzymuje nagrywanie i dodaje powiązane metadane do dostawcy telewizji, aby aplikacja TV mogła wyświetlać nagranie użytkownikom na żądanie.
Aby uzyskać więcej informacji na temat wdrażania funkcji nagrywania w usłudze TV Input, zapoznaj się z tym artykułem dotyczącym nagrywania TV .
Przydatne zasoby
- Ostatecznym punktem odniesienia jest Android CDD i udokumentowane interfejsy API dla programistów.
- CTS Verifier korzysta z interfejsów API w ramach programu testowania zgodności. Uruchomienie tego w telewizji na żywo może być przydatnym sposobem zobaczenia EPG, wyszukiwania, kontroli rodzicielskiej i innych wymagań w kontekście danych wejściowych innych firm.
- Zobacz Definiowanie usługi wejścia telewizyjnego, aby zapoznać się z oczekiwaniami programistów w tej dziedzinie.
Kontrola rodzicielska
Kontrola rodzicielska pozwala użytkownikowi blokować niepożądane kanały i programy, ale ominąć blokadę, wprowadzając kod PIN.
Odpowiedzialność za funkcje kontroli rodzicielskiej jest dzielona między aplikację TV, usługę TV Input Manager, dostawcę telewizji i TV Input.
Kontrola rodzicielska jest obowiązkowa i jest objęta programem CTS Verifier.
W wielu krajach zdefiniowano systemy ocen, z których mogą korzystać kanały telewizyjne za pośrednictwem interfejsu API TVContentRating . Dodatkowo TV Inputs może rejestrować własne niestandardowe systemy ocen, jak wykazał test CTS Verifier, który wprowadza „fałszywą” ocenę. W krajach, w których istnieje standardowy system klasyfikacji, zachęca się producentów urządzeń do łączenia kontroli rodzicielskiej ram wejściowych TV z wszelkimi innymi mechanizmami, które mogą zawierać.
Dostawca telewizji
Każdy wiersz kanału ma pole COLUMN_LOCKED
, które służy do blokowania oglądania określonych kanałów bez wprowadzania kodu PIN. Pole programu COLUMN_CONTENT_RATING
jest przeznaczone do wyświetlania i nie służy do wymuszania kontroli rodzicielskiej.
Menedżer wejść telewizyjnych
TV Input Manager przechowuje każdą zablokowaną TvContentRating
i odpowiada na isRatingBlocked()
, aby doradzić, czy treść z daną oceną powinna zostać zablokowana.
Wejście telewizyjne
TV Input sprawdza, czy bieżąca zawartość powinna zostać zablokowana, wywołując isRatingBlocked()
w TV Input Manager, gdy ocena wyświetlanej treści uległa zmianie (przy zmianie programu lub kanału) lub zmianie uległy ustawienia kontroli rodzicielskiej (w ACTION_BLOCKED_RATINGS_CHANGED
i ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED
) . Jeśli zawartość powinna zostać zablokowana, TV Input wyłącza audio i wideo oraz powiadamia aplikację TV, że bieżąca zawartość jest blokowana przez wywołanie notifyContentBlocked(TvContentRating)
. Jeśli zawartość nie powinna być blokowana, wejście TV włącza audio i wideo oraz powiadamia aplikację TV, że bieżąca zawartość jest dozwolona, wywołując funkcję notifyContentAllowed()
.
Aplikacja telewizyjna
Aby honorować interfejsy API kontroli rodzicielskiej, a tym samym stworzyć kompatybilną platformę, systemowa aplikacja TV musi umożliwiać użytkownikom zarządzanie kontrolą rodzicielską, w tym wszelkimi niestandardowymi ocenami zarejestrowanymi przez określone aplikacje.
Aplikacja TV wyświetla interfejs użytkownika z kodem PIN, gdy zostanie powiadomiona przez wejście TV, że bieżąca treść jest zablokowana lub gdy użytkownik próbuje obejrzeć zablokowany kanał.
Aplikacja TV nie zapisuje bezpośrednio ustawień kontroli rodzicielskiej. Gdy użytkownik zmieni ustawienia kontroli rodzicielskiej, każdy zablokowany TvContentRating
jest zapisywany przez TV Input Manager, a zablokowane kanały są przechowywane przez dostawcę telewizji.
Aplikacja TV musi zadeklarować uprawnienie android.permission.MODIFY_PARENTAL_CONTROLS
, aby zmienić ustawienia kontroli rodzicielskiej.
Zachęcamy producentów urządzeń do:
- Wykonaj test kontroli rodzicielskiej CTS Verifier w porównaniu z referencyjną aplikacją Live TV, aby zademonstrować wymagania dotyczące zgodności.
- Użyj aplikacji Telewizja na żywo jako odniesienia dla własnej aplikacji telewizyjnej: w szczególności zobacz źródła ContentRatingsManager i RatingSystemsFragment oraz sposób, w jaki obsługują one niestandardowe oceny.
HDMI-CEC
HDMI-CEC umożliwia sterowanie jednym urządzeniem innym, dzięki czemu jeden pilot może sterować wieloma urządzeniami w kinie domowym. Jest używany przez Android TV do przyspieszenia konfiguracji i umożliwia zdalne sterowanie różnymi wejściami telewizyjnymi za pośrednictwem centralnej aplikacji telewizyjnej. Na przykład może przełączać wejścia, włączać i wyłączać urządzenia i nie tylko.
Android TIF implementuje HDMI-CEC jako usługę sterowania HDMI, więc producenci urządzeń muszą jedynie opracować sterowniki niskiego poziomu, które współdziałają z lekką platformą Android TV HAL, pomijając bardziej złożoną logikę biznesową. Zapewniając standardową implementację, Android stara się złagodzić problemy ze zgodnością, redukując pofragmentowane implementacje i selektywną obsługę funkcji. Usługa sterowania HDMI wykorzystuje istniejące usługi systemu Android, w tym wejście i zasilanie.
Oznacza to, że istniejące implementacje HDMI-CEC będą musiały zostać przeprojektowane, aby współpracowały z Android TIF. Zalecamy, aby platforma sprzętowa zawierała mikroprocesor do odbierania zasilania CEC i innych poleceń.

- Magistrala CEC otrzymuje polecenie z aktualnie aktywnego źródła, aby przełączyć się na inne źródło.
- Sterownik przekazuje polecenie do HDMI-CEC HAL.
- HAL powiadamia wszystkie
ActiveSourceChangeListeners
. - Usługa sterowania HDMI jest powiadamiana o zmianie źródła za pośrednictwem
ActiveSourceChangeListener
. - Usługa TV Input Manager generuje intencję zmiany źródła przez aplikację TV.
- Następnie aplikacja TV tworzy sesję TV Input Manager dla przełączanego wejścia TV i wywołuje
setMain
w tej sesji. - Sesja TV Input Manager przekazuje te informacje do wejścia HDMI TV.
- Wejście HDMI TV żąda ustawienia powierzchni wstęgi bocznej.
- Usługa TV Input Manager generuje odpowiednie polecenie sterowania routingiem z powrotem do usługi sterowania HDMI, gdy powierzchnia jest ustawiona.
Wytyczne dotyczące integracji z telewizorem
Aplikacja do transmisji
Ponieważ każdy kraj ma specyficzne wymagania dotyczące transmisji (MHEG, telegazeta, HbbTV i inne), oczekuje się, że producenci będą dostarczać własne rozwiązania dla aplikacji do transmisji, na przykład:
- MHEG: natywny stos
- Telegazeta: natywny stos
- HbbTV: rozwiązanie HbbTV firmy Vewd Software
W wersji Androida L, Android TV oczekuje, że producenci urządzeń będą korzystać z integratorów systemów lub rozwiązań Androida dla regionalnych stosów telewizyjnych, przekazywać powierzchnię do stosów oprogramowania telewizyjnego lub przekazywać kod klucza niezbędny do interakcji ze starszymi stosami.
Oto jak współdziałają aplikacja do transmisji i aplikacja telewizyjna:
- Aplikacja TV jest w centrum uwagi i odbiera wszystkie klucze.
- Aplikacja TV przekazuje klucze (np. czerwony przycisk) do telewizora.
- Urządzenie wejściowe TV integruje się wewnętrznie ze starszym zestawem telewizyjnym.
- Po otrzymaniu kodu aktywacyjnego (np. czerwonego przycisku) urządzenie wejściowe TV aktywuje aplikacje do transmisji.
- Aplikacja do transmisji koncentruje się w aplikacji telewizyjnej i obsługuje działania użytkownika.
W przypadku wyszukiwania/rekomendacji głosowych aplikacja do transmisji może obsługiwać wyszukiwanie głosowe w aplikacji.
,
Android TV Input Framework (TIF) upraszcza dostarczanie treści na żywo do Android TV. Android TIF zapewnia standardowy interfejs API dla producentów do tworzenia modułów wejściowych do sterowania Android TV oraz umożliwia wyszukiwanie telewizji na żywo i rekomendacje za pośrednictwem metadanych publikowanych przez TV Input.
Ramy nie mają na celu wdrożenia standardów telewizyjnych ani wymogów regionalnych, ale ułatwiają producentom urządzeń spełnienie regionalnych standardów transmisji telewizji cyfrowej bez ponownego wdrażania. Dokumentacja w tej sekcji może być również przydatna dla twórców aplikacji innych firm, którzy chcą tworzyć niestandardowe wejścia telewizyjne.
składniki
Implementacja Android TV Input Framework obejmuje Menedżera wprowadzania TV. TIF współpracuje z aplikacją TV, aplikacją systemową, której nie można zastąpić aplikacją innej firmy, w celu uzyskania dostępu do kanałów wbudowanych i tunera IP. Aplikacja TV komunikuje się z modułami wejściowymi TV dostarczonymi przez producenta urządzenia lub inne strony za pośrednictwem Menedżera wejść TV.
Struktura wprowadzania TV składa się z:
- Dostawca telewizji (
com.android.providers.tv.TvProvider
): baza danych kanałów, programów i powiązanych uprawnień - Aplikacja TV (
com.android.tv.TvActivity
): aplikacja obsługująca interakcję użytkownika - TV Input Manager (
android.media.tv.TvInputManager
): umożliwia komunikację wejść TV z aplikacją TV - TV Input: aplikacja reprezentująca fizyczne lub wirtualne tunery i porty wejściowe
- TV Input HAL (moduł
tv_input
): definicja sprzętowa, która umożliwia systemowym wejściom telewizyjnym dostęp do sprzętu specyficznego dla telewizora po zaimplementowaniu - Kontrola rodzicielska: technologia umożliwiająca blokowanie kanałów i programów
- HDMI-CEC: technologia umożliwiająca zdalne sterowanie różnymi urządzeniami przez HDMI
- Tuner Framework: framework dla wbudowanego tunera telewizyjnego
- MediaCas: ramy dostępu warunkowego
- Menedżer zasobów tunera: usługa do zarządzania zasobami sprzętowymi dla wejścia TV, MediaCas i wejścia wbudowanego tunera
Te komponenty są szczegółowo omówione poniżej. Zobacz poniższy diagram, aby zobaczyć szczegółowy widok architektury Android TV Input Framework.

Przepływ
Oto jak wykonywana jest architektura:
- Użytkownik widzi i wchodzi w interakcje z aplikacją TV, aplikacją systemową, której nie można zastąpić aplikacją innej firmy.
- Aplikacja TV wyświetla zawartość AV z wejścia TV.
- Aplikacja TV nie może komunikować się bezpośrednio z wejściami TV. Menedżer wejść TV identyfikuje stan wejść TV dla aplikacji TV. Więcej informacji na temat tych ograniczeń można znaleźć w Menedżerze wejść TV poniżej.
Uprawnienia
- Tylko
signatureOrSystem
TV Inputs i TV App mają pełny dostęp do bazy danych dostawców TV i mogą odbierać KeyEvents. - Tylko systemowe wejścia TV mają dostęp do HAL wejścia TV za pośrednictwem usługi TV Input Manager. Wejścia TV są dostępne bezpośrednio za pośrednictwem sesji TV Input Manager.
- Wejścia telewizyjne innych firm mają dostęp do bazy danych dostawcy telewizji z blokadą pakietu i mogą ODCZYTAĆ/ZAPISAĆ tylko pasujące wiersze pakietu.
- Wejścia telewizyjne innych firm mogą wyświetlać własne treści lub treści z wejść telewizyjnych przekazywanych przez producenta urządzenia, takich jak HDMI1. Nie mogą wyświetlać treści z nieprzepuszczalnych wejść telewizyjnych, takich jak wbudowany tuner lub tuner IPTV.
- Uprawnienie
TV_INPUT_HARDWARE
dla sprzętowej aplikacji TV Input sygnalizuje usłudze TV Input Manager, aby powiadomiła usługę TV Input podczas uruchamiania, aby wywołała usługę TV Input Manager i dodała swoje wejścia telewizyjne. To uprawnienie umożliwia sprzętowej aplikacji TV Input obsługę wielu wejść TV na usługę TV Input, a także dynamiczne dodawanie i usuwanie obsługiwanych wejść TV.
Dostawca telewizji
The TV Provider database stores the channels and programs from TV Inputs. The TV Provider also publishes and manages the associated permissions so that TV Inputs can see only their own records. For instance, a specific TV Input can see only the channels and programs it has supplied and is prohibited from accessing any other TV Inputs' channels and programs.
The TV Provider maps "broadcast genre" to "canonical genre" internally. TV Inputs are responsible for populating "broadcast genre" with the value in the underlying broadcast standard, and the "canonical genre" field will automatically be populated with the correct associated genre from android.provider.TvContract.Genres
. For example, with broadcast standard ATSC A/65 and program with genre 0x25 (meaning “Sports”), the TV Input will populate the “broadcast genre” with the String “Sports” and TV Provider will populate the “canonical genre” field with the mapped value android.provider.TvContract.Genres.SPORTS
.
See the diagram below for a detailed view of the TV Provider.

Only apps in the privileged system partition can read the entire TV Provider database.
Passthrough TV inputs do not store channels and programs.
In addition to the standard fields for channels and programs, the TV Provider database also offers a BLOB type field, COLUMN_INTERNAL_PROVIDER_DATA
, in each table that TV Inputs may use to store arbitrary data. That BLOB data can include custom information, such as frequency of the associated tuner, and may be provided in a protocol buffer or another form. A Searchable field is available to make certain channels unavailable in search (such as to meet country-specific requirements for content protection).
Database field examples
The TV Provider supports structured data in channel ( android.provider.TvContract.Channels
) and program ( android.provider.TvContract.Programs
) tables. These tables are populated and accessed by TV Inputs and system apps like the TV App. These tables have four types of fields:
- Display: Display fields contain information that apps may want to make visible to the user, like a channel's name (
COLUMN_DISPLAY_NAME
) or number (COLUMN_DISPLAY_NUMBER
), or the title of the program being viewed. - Metadata: There are three fields for identifying content, according to relevant standards, like a channel's transport stream ID (
COLUMN_TRANSPORT_STREAM_ID
), original network ID (COLUMN_ORIGINAL_NETWORK_ID
) and service id (COLUMN_SERVICE_ID
). - Internal data : Fields that are for the custom use of TV Inputs.
Some fields, likeCOLUMN_INTERNAL_PROVIDER_DATA
, are customizable BLOB fields where a TV Input can store arbitrary metadata about their channel or program. - Flag: Flag fields represent whether a channel should be restricted from search, browse, or viewing. This can be set only at the channel level. All programs defer to the setting on the channel.
-
COLUMN_SEARCHABLE
: Restricting search from some channels may be a requirement in certain regions.COLUMN_SEARCHABLE = 0
means the channel should not be exposed in search results. -
COLUMN_BROWSABLE
: Visible to system applications only. Restricting channel from being browsed by applications.COLUMN_BROWSABLE = 0
means the channel should not be included in the channel list. -
COLUMN_LOCKED
: Visible to system applications only. Restricting channel from being viewed by invalid accounts without entering PIN code.COLUMN_LOCKED = 1
means the channel should be protected by parental control.
For a more exhaustive list of the fields, see android/frameworks/base/media/java/android/media/tv/TvContract.java
Permissions and access control
All fields are visible to anyone with access to the corresponding row. No fields are directly accessible to users; they see only what the TV App, System apps, or TV Inputs surface.
- Each row has
PACKAGE_NAME
, the package (app) that owns that row, checked on Query, Insert, Update via TvProvider.java. A TV Input may access only the information it wrote and is cordoned off from the information provided by other TV Inputs. - READ, WRITE permissions via AndroidManifest.xml (requires user consent) to determine available channels.
- Only
signatureOrSystem
apps can acquireACCESS_ALL_EPG_DATA
permission to access the entire database.
TV Input Manager
The TV Input Manager provides a central system API to the overall Android TV Input Framework. It arbitrates interaction between apps and TV Inputs and provides parental control functionality. TV Input Manager sessions must be created one-to-one with TV Inputs. The TV Input Manager allows access to installed TV Inputs so apps may:
- List TV inputs and check their status
- Create sessions and manage listeners
For sessions, a TV Input may be tuned by the TV App only to URIs it has added to the TV Provider database, except for passthrough TV Inputs which can be tuned to using TvContract.buildChannelUriForPassthroughInput()
. A TV Input may also have its volume set. TV Inputs provided and signed by the device manufacturer (signature apps) or other apps installed in the system partition will have access to the entire TV Provider database. This access can be used to construct apps to browse and search across all available TV channels and programs.
An app may create and register a TvInputCallback
with the android.media.tv.TvInputManager
to be called back on a TV Input's state change or on the addition or removal of a TV Input. For example, a TV App can react when a TV Input is disconnected by displaying it as disconnected and preventing its selection.
The TV Input Manager abstracts communication between the TV App and TV Inputs. The standard interface of TV Input Manager and TV Input allows multiple device manufacturers to create their own TV Apps while helping all third-party TV Inputs work on all TV Apps.
TV Inputs
TV Inputs are Android apps in the sense they have an AndroidManifest.xml and are installed (via Play, pre-installed, or sideloaded). Android TV supports pre-installed system apps, apps signed by the device manufacturer and third-party TV Inputs.
Some inputs, like the HDMI input or built-in tuner input, can be provided only by the manufacturer as they speak directly with the underlying hardware. Others, such as IPTV, place-shifting, and external STB, can be supplied by third parties as APKs on Google Play Store. Once downloaded and installed, the new input can be selected within the TV App.
Passthrough input example

In this example, the TV Input provided by the device manufacturer is trusted and has full access to the TV Provider. As a passthrough TV Input, it does not register any channels or programs with the TV Provider. To obtain the URI used to reference the passthrough input, use the android.media.tv.TvContract
utility method buildChannelUriForPassthroughInput(String inputId)
. The TV App communicates with the TV Input Manager to reach the HDMI TV Input.
Built-in tuner example

In this example, the Built-in Tuner TV Input provided by the device manufacturer is trusted and has full access to the TV Provider.
Third-party input example

In this example, the external STB TV Input is provided by a third party. Since that TV Input can't directly access the HDMI video feed coming in, it must go through the TV Input Manager and use the HDMI TV Input provided by the device manufacture.
Through the TV Input Manager, the external STB TV Input can speak with the HDMI TV Input and ask it to show the video on HDMI1. So the STB TV Input can control the TV while the manufacturer-provided HDMI TV Input renders the video.
Picture in picture (PIP) example

The diagram above shows how buttons on a remote control are passed to a specific TV Input for picture in picture (PIP) display. Those button presses are interpreted by the hardware driver supplied by the device manufacturer, converting hardware scancodes to Android keycodes and passing them to the standard Android input pipeline InputReader
and InputDispatcher
functions as KeyEvents . These in turn trigger events on the TV App if it is in focus.
Only system TV Inputs are eligible to receive InputEvents
, and only if they have the RECEIVE_INPUT_EVENT
system permission. The TV Input is responsible to determine which InputEvents to consume and should allow the TV App to handle the keys it does not need to consume.
The TV App is responsible for knowing which system TV Input is active, meaning selected by the user, and to disambiguate incoming KeyEvents
and route them to the correct TV Input Manager session, calling dispatchInputEvent()
to pass on the event to the associated TV Input.
MHEG-5 input example
The following diagram shows a more detailed view of how KeyEvents
are routed through the Android TIF.

It depicts the flow of a Red button app, common in Europe for letting users access interactive apps on their televisions. An app can be delivered over this transport stream. When the button is clicked, it lets users interact with these broadcast apps. For example, you might use these broadcast apps to access related web pages or sports scores.
See the Broadcast app section to learn how broadcast apps interact with the TV App.
In this example:
- The TV App is in focus and receives all keys.
-
KeyEvents
(eg the Red button) is passed to the active TV Input asInputEvents.
- The system TV Input integrates with MHEG-5 stack and has the
RECEIVE_INPUT_EVENT
system permission. - On receiving activation keycode (eg Red button), the TV Input activates broadcast app.
- TV input consumes
KeyEvents
asInputEvents
and the broadcast app is the focus and handlesInputEvents
until dismissed.
Note : Third-party TV inputs never receive keys.
TV Input HAL
The TV Input HAL aids development of TV Inputs to access TV-specific hardware. As with other Android HALs, the TV Input HAL ( tv_input
) is available in the AOSP source tree and the vendor develops its implementation.
TV App
The system TV App presents live TV content to the user. A reference TV App (Live TV) is provided alongside the Android platform, which can be used as-is, customized, extended, or replaced by device manufacturers. The source code is available in the Android Open Source Project, and you can get started with it in the Reference TV app article.
Device manufacturers may extend their TV Apps to implement device manufacturer or country-specific features, however this is not in the scope of TIF or the reference TV App.
At a minimum, the system TV App needs to handle the following tasks:
Setup and configuration
- Auto-detect TV Inputs
- Let TV Inputs initiate channel setup
- Control parental settings
- Edit channels
Viewing
- Access and navigate all TV channels
- Access TV program information bar
- Display Electronic Programming Guide (EPG) data
- Support multiple audio and subtitle tracks
- Supply parental control PIN challenge
- Allow TV Input UI overlay for TV standard (HbbTV, etc.)
- Populate search results for TV channels and programs
- Display app linking cards
- Support timeshifting APIs
- Handle DVR functionality and support TV recording APIs
This feature set will increase in line with new Android versions where the platform TIF APIs are extended. CTS Verifier provides the compatibility test coverage.
Support for third-party TV Inputs
Android TV provides developer APIs for third-party TV inputs, enabling installed apps to deliver software channels into the live TV experience. To ensure a compatible Android device implementation, the system TV App has some responsibilities regarding surfacing third-party TV inputs and channels to the user. The reference Live TV app provides a compatible implementation; if replacing the system TV App, device manufacturers must ensure their own apps provide similar compatibility, to meet developer expectations across all Android TV devices.
The system TV App must surface third-party inputs alongside the device's default live TV service. The promise of the developer APIs is that users will be able to find channels (once installed) within their standard TV experience.
Visual differentiation between built-in channels and third-party channels is allowed, as defined in the TV App section of the Android CDD.
The following sections show how the Live TV application fulfills the CDD requirements.
New channel setup
The addition of new third-party inputs/channels begins with the user finding and installing a TV Input from an application store, such as Google Play.
Some third-party TV inputs automatically add channels to the TvProvider database. However most will provide a Setup activity to enable the user to set up their channels, provide login details, and other actions. The system TV App needs to ensure the user can activate this Setup activity, which is why the CDD requires third-party inputs be minimal navigation actions away from the main TV App.
The reference Live TV app provides the Channel Sources menu for accessing inputs.




In addition a notification card is shown at the top of the TV App menu after a new TvInput is installed, to take the user directly to the Setup:

If the user takes action through the notification, they can select to set up their sources as seen in Figure 10.
See Define Your TV Input Service for developer expectations in this area.
Customize the channel list
Device manufacturers may provide a UI to hide certain channels and enable users to manage their own EPGs. Live TV includes this facility.


EPG
Third-party input developers need to have confidence that users can easily navigate to their channels during general usage, across all compatible Android TV devices.
Channels from third-party inputs must be presented as part of the device's standard live TV experience EPG. Visual separation or separate categories for third-party channels can be used (see the TV App section of the Android CDD) —what's key is that users are able to find the channels they have installed.
Search
Manufacturers must implement the TV App to include search results for global search requests in order to ensure the best user experience. Live TV provides an implementation (see which provides results from third-party inputs (required for platform compatibility) as well as built-in inputs.
Time shifting
For devices on Android 6.0 and above, the TV App must support the Android framework time shifting APIs . Additionally, manufacturers must implement playback controls in the TV App, which allow users to pause, resume, rewind, and fast forward the playback.
For TV Inputs that support time shifting, the TV App needs to display playback controls.

DVR
For devices on Android 7.0 and above, the TV App must support the Android framework TV recording APIs , to support, list, and play recorded programs.
This allows device manufacturers to plug their DVR subsystems into TIF and dramatically reduce the integration effort it takes to enable or integrate DVR functionality on a TV device. It also enables third parties to provide aftermarket DVR systems that can be plugged into an Android TV device.
In addition to recording live content, the TV App also handles resource conflict. For example, if the device has two tuners, it can record two programs at the same time. If the user asks to record three, the TV App must handle the conflict and should either surface a notification or request that the user schedules a priority for these requests.
TV Apps can also implement more sophisticated logic like asking a user if they'd like to record all future episodes in a series when they request to record one episode.
See the following diagram for a view into a possible DVR implementation in Android TV.

- The TV Input Service tells the TV App how many tuners are available so that the TV App can handle possible resource conflict.
- The TV App receives a user-initiated request to record a TV program.
- The TV App stores the recording schedule in its internal database.
- When it's time to record, the TV App passes a request to tune to the channel associated with the recording.
- The TV Input Service receives this request, responds with whether or not there are appropriate resources, and tunes to the channel.
- Then the TV App passes a request to start recording to the TV Input Manager.
- The TV Input Service receives this request and starts recording.
- The TV Input Service stores the actual video data in its storage, which can be external storage or cloud storage.
- When it's time to finish the recording, the TV App passes the stop recording request to the TV Input Manager.
- Once the TV Input Service receives the request, it stops the recording and adds its associated metadata to the TV Provider so that the TV App can show the recording to users when requested.
For more information about implementing Recording features in your TV Input service, see this TV Recording article.
Useful resources
- The Android CDD and documented developer APIs are the definitive references.
- CTS Verifier exercises the APIs as part of the compatibility testing program. Running this against Live TV may be a useful way to see the EPG, Search, Parental Control, and other requirements in the context of third-party inputs.
- See Define Your TV Input Service for developer expectations in this area.
Parental control
Parental control lets a user block undesired channels and programs, but bypass the block by entering a PIN code.
Responsibility for parental control functionality is shared amongst the TV App, TV Input Manager service, TV Provider, and TV Input.
Parental control is mandatory, and is covered by CTS Verifier.
A number of countries have defined rating systems that TV Inputs can use via the TVContentRating API . Additionally, TV Inputs can register their own custom rating systems as demonstrated by the CTS Verifier test, which introduces a 'fake' rating. For countries where a standard rating system exists, device manufacturers are encouraged to combine the TV Input Framework Parental Control with any other mechanisms they may include.
TV provider
Each channel row has a COLUMN_LOCKED
field that is used to lock specific channels from viewing without entering a PIN code. The program field COLUMN_CONTENT_RATING
is intended for display and is not used to enforce parental control.
TV Input Manager
The TV Input Manager stores every blocked TvContentRating
and responds to isRatingBlocked()
to advise if content with the given rating should be blocked.
TV Input
The TV Input checks if the current content should be blocked by calling isRatingBlocked()
on the TV Input Manager when the rating of the displayed content has changed (on program or channel change), or parental control settings have changed (on ACTION_BLOCKED_RATINGS_CHANGED
and ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED
). If the content should be blocked, the TV Input disables the audio and video and notifies the TV app that the current content is blocked by calling notifyContentBlocked(TvContentRating)
. If the content should not be blocked, the TV Input enables audio and video and notifies the TV App the current content is allowed by calling notifyContentAllowed()
.
TV App
To honor the parental control APIs, and therefore create a compatible platform, the system TV App needs to provide a way for users to manage parental control, including for any custom ratings registered by specific apps.
The TV App shows a PIN code UI when it is notified by a TV Input that the current content is blocked or when the user attempts to view a blocked channel.
The TV App does not directly store the parental control settings. When the user changes the parental control settings, every blocked TvContentRating
is stored by the TV Input Manager, and blocked channels are stored by the TV Provider.
The TV App needs to declare the permission android.permission.MODIFY_PARENTAL_CONTROLS
in order to change the parental control settings.
Device manufacturers are encouraged to:
- Exercise the CTS Verifier parental controls test against the reference Live TV application for a demonstration of the compatibility requirements.
- Use the Live TV app as reference for their own TV App: in particular see ContentRatingsManager and RatingSystemsFragment source, and how they handle custom ratings.
HDMI-CEC
HDMI-CEC allows one device to control another, thereby enabling a single remote to control multiple appliances in a home theater. It is used by Android TV to speed setup and allow distant control over various TV Inputs via the central TV App. For instance, it may switch inputs, power up or down devices, and more.
The Android TIF implements HDMI-CEC as the HDMI Control Service so that device manufacturers merely need to develop low-level drivers that interact with the lightweight Android TV HAL, skipping more complex business logic. In providing a standard implementation, Android seeks to mitigate compatibility issues by reducing fragmented implementations and selective feature support. The HDMI Control Service uses the existing Android services, including input and power.
This means existing HDMI-CEC implementations will need to be redesigned to interoperate with the Android TIF. We recommend the hardware platform contain a microprocessor to receive CEC power on and other commands.

- The CEC bus receives a command from the currently active source to switch to a different source.
- The driver passes the command to the HDMI-CEC HAL.
- The HAL notifies all
ActiveSourceChangeListeners
. - THe HDMI Control Service is notified of source change via
ActiveSourceChangeListener
. - The TV Input Manager service generates an intent for the TV App to switch the source.
- The TV App then creates a TV Input Manager Session for the TV Input being switched to and calls
setMain
on that session. - The TV Input Manager Session passes this information on to the HDMI TV Input.
- The HDMI TV input requests to set sideband surface.
- The TV Input Manager Service generates a corresponding routing control command back to HDMI Control Service when the surface is set.
TV integration guidelines
Broadcast app
Because each country has broadcast-specific requirements (MHEG, Teletext, HbbTV, and more), manufacturers are expected to supply their own solutions for the broadcast app, for example:
- MHEG: native stack
- Teletext: native stack
- HbbTV: HbbTV solution from Vewd Software
In the Android L release, Android TV expects device manufacturers to use systems integrators or the Android solutions for regional TV stacks, pass the surface to TV software stacks, or pass the necessary key code to interact with legacy stacks.
Here's how the broadcast app and TV App interact:
- The TV App is in focus, receiving all keys.
- The TV App passes keys (eg Red button) to the TV Input device.
- The TV Input device internally integrates with legacy TV stack.
- On receiving an activation keycode (eg Red button), the TV Input device activates broadcast apps.
- A broadcast app takes focus in the TV App and handles user actions.
For voice search/recommendation, the broadcast app may support In-app search for voice search.