Framework wejścia TV

Ikona HAL Androida TV

Platforma wejściowa Android TV (TIF) upraszcza dostarczanie treści na żywo na Androida TV. Android TIF udostępnia standardowy interfejs API, który umożliwia producentom tworzenie modułów wejściowych do sterowania Androidem TV, a także wyszukiwanie i rekomendowanie telewizji na żywo za pomocą metadanych publikowanych przez wejście telewizyjne.

Nie ma na celu wdrożenia standardów telewizyjnych ani wymagań regionalnych, ale ułatwia producentom urządzeń spełnianie regionalnych standardów cyfrowej transmisji telewizyjnej bez konieczności ponownego wdrażania. Dokumentacja w tej sekcji może być też przydatna dla deweloperów aplikacji innych firm, którzy chcą tworzyć niestandardowe wejścia TV.

Komponenty

Implementacja platformy wejść Android TV obejmuje menedżera wejść TV. Interfejs TIF współpracuje z aplikacją TV, czyli aplikacją systemową, której nie można zastąpić aplikacją innej firmy, aby uzyskać dostęp do wbudowanych kanałów i kanałów tunera IP. Aplikacja TV komunikuje się z modułami wejścia TV dostarczonymi przez producenta urządzenia lub inne podmioty za pomocą Menedżera wejść TV.

TV Input Framework 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, która obsługuje interakcje użytkownika.
  • Menedżer wejść telewizyjnych (android.media.tv.TvInputManager): umożliwia wejściom telewizyjnym komunikację z aplikacją telewizyjną.
  • Wejście TV: aplikacja reprezentująca fizyczne lub wirtualne tunery i porty wejściowe.
  • TV Input HAL (moduł tv_input): definicja sprzętu, która po wdrożeniu umożliwia systemowym wejściom TV dostęp do sprzętu związanego z telewizją.
  • Kontrola rodzicielska: technologia umożliwiająca blokowanie kanałów i programów.
  • HDMI-CEC: technologia umożliwiająca zdalne sterowanie różnymi urządzeniami za pomocą złącza HDMI.
  • Platforma tunera: platforma wejścia TV z wbudowanym tunerem
  • MediaCas: platforma dostępu warunkowego
  • Menedżer zasobów tunera: usługa do zarządzania zasobami sprzętowymi dla wejścia TV, MediaCas i wbudowanego tunera.

Te komponenty opisujemy szczegółowo poniżej. Szczegółowy widok architektury platformy wejściowej Androida TV znajdziesz na poniższym schemacie.

Omówienie architektury TIF na Androidzie
Rysunek 1. Architektura Android TV Input Framework (TIF)

Flow

Architektura działa w ten sposób:

  1. Użytkownik widzi aplikację TV i może z niej korzystać. Jest to aplikacja systemowa, której nie można zastąpić aplikacją innej firmy.
  2. Aplikacja TV wyświetla treści AV z wejścia TV.
  3. Aplikacja TV nie może komunikować się bezpośrednio z wejściami TV. Menedżer wejść TV określa stan wejść TV w aplikacji TV. Więcej informacji o tych ograniczeniach znajdziesz w sekcji Menedżer wejść TV poniżej.

Uprawnienia

  • Tylko signatureOrSystemwejścia telewizora i aplikacja telewizora mają pełny dostęp do bazy danych dostawcy telewizji i mogą odbierać KeyEvents.
  • Tylko systemowe źródła TV mogą uzyskiwać dostęp do interfejsu HAL źródła TV za pomocą usługi Menedżer źródeł TV. Dostęp do wejść telewizyjnych jest uzyskiwany w sesjach Menedżera wejść telewizyjnych.
  • Wejścia telewizyjne innych firm mają dostęp do bazy danych dostawcy telewizji w ramach pakietu i mogą odczytywać/zapisywać tylko wiersze pasujące do pakietu.
  • Wejścia telewizora innych firm mogą wyświetlać własne treści lub treści z wejść telewizora producenta urządzenia, np. HDMI1. Nie mogą wyświetlać treści z wejść telewizyjnych innych niż passthrough, takich jak wbudowany tuner lub tuner IPTV.
  • TV_INPUT_HARDWARE uprawnienie dla aplikacji wejścia TV, sygnalizuje usłudze Menedżera wejść TV, aby powiadomiła usługę wejścia TV o uruchomieniu, aby wywołać usługę Menedżera wejść TV i dodać jej wejścia TV. To uprawnienie umożliwia aplikacji do obsługi wejścia telewizyjnego obsługę wielu wejść telewizyjnych w ramach jednej usługi wejścia telewizyjnego, a także dynamiczne dodawanie i usuwanie obsługiwanych wejść telewizyjnych.

Dostawca sygnału telewizyjnego

Baza danych dostawcy telewizji przechowuje kanały i programy z wejść telewizyjnych. Dostawca telewizji publikuje też powiązane uprawnienia i nimi zarządza, aby wejścia telewizyjne widziały tylko własne rekordy. Na przykład konkretne wejście telewizyjne może wyświetlać tylko kanały i programy, które dostarcza, i nie ma dostępu do kanałów i programów z innych wejść telewizyjnych.

Dostawca telewizji mapuje wewnętrznie „gatunek transmisji” na „kanoniczny gatunek”. TV Wejścia odpowiadają za wypełnianie pola „gatunek transmisji” wartością w podstawowym standardzie transmisji, a pole „kanoniczny gatunek” zostanie automatycznie wypełnione prawidłowym powiązanym gatunkiem z android.provider.TvContract.Genres. Na przykład w przypadku standardu transmisji ATSC A/65 i programu o gatunku 0x25 (czyli „Sport”) wejście TV wypełni pole „gatunek transmisji” ciągiem znaków „Sport”, a dostawca TV wypełni pole „kanoniczny gatunek” zmapowaną wartością android.provider.TvContract.Genres.SPORTS.

Szczegółowy widok dostawcy telewizji znajdziesz na diagramie poniżej.

Dostawca Androida TV
Rysunek 2. Dostawca Androida TV

Tylko aplikacje w uprzywilejowanej partycji systemowej mogą odczytywać całą bazę danych dostawców telewizji.

Wejścia TV typu passthrough nie przechowują kanałów ani programów.

Oprócz standardowych pól dotyczących kanałów i programów baza danych dostawcy telewizji zawiera też pole typu BLOB, COLUMN_INTERNAL_PROVIDER_DATA, w każdej tabeli, którego wejścia telewizyjne mogą używać do przechowywania dowolnych danych. Te dane BLOB mogą zawierać informacje niestandardowe, takie jak częstotliwość powiązanego tunera, i mogą być przekazywane w buforze protokołu lub w innej formie. Dostępne jest pole z możliwością wyszukiwania, które umożliwia wyłączenie niektórych kanałów w wyszukiwarce (np. w celu spełnienia wymagań dotyczących ochrony treści w danym kraju).

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ść TV oraz aplikacji systemowych, takich jak aplikacja TV. Tabele te zawierają 4 rodzaje pól:

  • Wyświetlanie: pola wyświetlania zawierają informacje, które aplikacje mogą chcieć udostępnić użytkownikowi, np. nazwę (COLUMN_DISPLAY_NAME) lub numer (COLUMN_DISPLAY_NUMBER) kanału albo tytuł oglądanego programu.
  • Metadane: istnieją 3 pola do identyfikowania treści zgodnie z odpowiednimi standardami, np. 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 przez wejścia TV.
    Niektóre pola, np. COLUMN_INTERNAL_PROVIDER_DATA, można dostosowywać. Pola BLOB, w których wejście TV może przechowywać dowolne metadane dotyczące kanału lub programu.
  • Flaga: pola flagi określają, czy kanał powinien być wykluczony z wyszukiwania, przeglądania lub wyświetlania. Można go ustawić tylko na poziomie kanału. Wszystkie programy są zgodne z ustawieniami kanału.
    • COLUMN_SEARCHABLE: Ograniczenie wyszukiwania z niektórych kanałów może być wymagane w określonych regionach. COLUMN_SEARCHABLE = 0 oznacza, że kanał nie powinien być widoczny w wynikach wyszukiwania.
    • COLUMN_BROWSABLE: widoczne tylko dla aplikacji systemowych. Ograniczanie możliwości przeglądania kanału przez aplikacje. COLUMN_BROWSABLE = 0 oznacza, że kanał nie powinien być uwzględniony na liście kanałów.
    • COLUMN_LOCKED: widoczne tylko dla aplikacji systemowych. Ograniczanie możliwości oglądania kanału przez nieprawidłowe konta bez wpisywania kodu PIN. COLUMN_LOCKED = 1 oznacza, że kanał powinien być chroniony przez kontrolę rodzicielską.

Pełniejszą listę pól znajdziesz w android/frameworks/base/media/java/android/media/tv/TvContract.java

Uprawnienia i kontrola dostępu

Wszystkie pola są widoczne dla każdej osoby, która ma dostęp do odpowiedniego wiersza. Użytkownicy nie mają bezpośredniego dostępu do żadnych pól. Widzą tylko to, co wyświetlają aplikacje telewizyjne, aplikacje systemowe lub wejścia telewizora.

  • Każdy wiersz ma PACKAGE_NAME, czyli pakiet (aplikację), do którego należy ten wiersz. Jest on sprawdzany podczas wykonywania zapytań, wstawiania i aktualizowania za pomocą TvProvider.java. Wejście telewizora może mieć dostęp tylko do informacji, które zostało zapisane, i jest odseparowane od informacji dostarczanych przez inne wejścia telewizora.
  • Uprawnienia ODCZYTU i ZAPISU w pliku AndroidManifest.xml (wymagają zgody użytkownika) do określania dostępnych kanałów.
  • Tylko signatureOrSystem aplikacje mogą uzyskaćACCESS_ALL_EPG_DATA uprawnienia dostępu do całej bazy danych.

Menedżer wejść TV

Menedżer wejść TV udostępnia centralny interfejs API systemu dla całej platformy wejść Androida TV. Arbiter interakcji między aplikacjami a wejściami TV i zapewnia funkcję kontroli rodzicielskiej. Sesje Menedżera wejść TV muszą być tworzone w relacji 1:1 z wejściami TV. Menedżer wejść TV umożliwia dostęp do zainstalowanych wejść TV, dzięki czemu aplikacje mogą:

  • Wyświetlanie listy wejść TV i sprawdzanie ich stanu
  • Tworzenie sesji i zarządzanie słuchaczami

W przypadku sesji aplikacja telewizyjna może dostrajać wejście telewizyjne tylko do identyfikatorów URI, które dodała do bazy danych dostawcy telewizji, z wyjątkiem wejść telewizyjnych typu passthrough, które można dostrajać za pomocą TvContract.buildChannelUriForPassthroughInput(). Głośność sygnału wejściowego telewizora również może być ustawiona. Dane wejściowe telewizora dostarczone i podpisane przez producenta urządzenia (aplikacje z podpisem) lub inne aplikacje zainstalowane w partycji systemowej będą mieć dostęp do całej bazy danych dostawcy telewizji. Ten dostęp może być wykorzystywany do tworzenia aplikacji do przeglądania i wyszukiwania wszystkich dostępnych kanałów i programów telewizyjnych.

Aplikacja może utworzyć i zarejestrować TvInputCallback za pomocą android.media.tv.TvInputManager, aby otrzymywać wywołania zwrotne w przypadku zmiany stanu wejścia telewizyjnego lub dodania bądź usunięcia wejścia telewizyjnego. Na przykład aplikacja telewizyjna może reagować na odłączenie wejścia telewizyjnego, wyświetlając informację o odłączeniu i uniemożliwiając jego wybór.

Menedżer źródeł TV abstrahuje komunikację między aplikacją TV a źródłami TV. Standardowy interfejs Menedżera wejść TV i wejścia TV umożliwia wielu producentom urządzeń tworzenie własnych aplikacji TV, a jednocześnie pomaga wszystkim wejściom TV innych firm działać we wszystkich aplikacjach TV.

Wejścia TV

Wejścia TV to aplikacje na Androida, ponieważ mają plik AndroidManifest.xml i są instalowane (przez Google Play, fabrycznie lub z pliku APK). Android TV obsługuje preinstalowane aplikacje systemowe, aplikacje podpisane przez producenta urządzenia i wejścia TV innych firm.

Niektóre dane wejściowe, takie jak wejście HDMI lub wbudowany tuner, mogą być dostarczane tylko przez producenta, ponieważ komunikują się bezpośrednio z odpowiednim sprzętem. Inne, takie jak IPTV, przenoszenie treści i zewnętrzne dekodery STB, mogą być dostarczane przez podmioty zewnętrzne w postaci plików APK w Sklepie Google Play. Po pobraniu i zainstalowaniu nowego wejścia można je wybrać w aplikacji TV.

Przykład danych wejściowych przekazywanych dalej

Wejście systemowe Androida TV
Rysunek 3. Android TV System Input

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

Przykład wbudowanego tunera

Wejście wbudowanego tunera Androida TV
Rysunek 4. Wejście wbudowanego tunera Androida TV

W tym przykładzie wejście tunera wbudowanego w telewizor dostarczone przez producenta urządzenia jest zaufane i ma pełny dostęp do dostawcy telewizji.

Przykład danych wejściowych pochodzących od innej firmy

Wejście zewnętrzne Androida TV
Rysunek 5. Wejście zewnętrzne na Androidzie TV

W tym przykładzie zewnętrzne wejście STB TV jest dostarczane przez osobę trzecią. Ponieważ to wejście telewizora nie ma bezpośredniego dostępu do przychodzącego sygnału wideo HDMI, musi przejść przez Menedżera wejść telewizora i użyć wejścia HDMI telewizora dostarczonego przez producenta urządzenia.

Za pomocą Menedżera wejść telewizora zewnętrzne wejście telewizora STB może komunikować się z wejściem telewizora HDMI i prosić o wyświetlenie obrazu na HDMI1. Dzięki temu wejście STB TV Input może sterować telewizorem, a wejście HDMI TV Input dostarczone przez producenta może renderować obraz.

Przykład obrazu w obrazie (PIP)

Android TV KeyEvents
Rysunek 6. Android TV KeyEvents

Diagram powyżej pokazuje, jak przyciski na pilocie są przekazywane do konkretnego wejścia telewizyjnego w celu wyświetlania obrazu w obrazie (PIP). Naciśnięcia przycisków są interpretowane przez sterownik sprzętu dostarczony przez producenta urządzenia, który przekształca kody skanowania sprzętu na kody klawiszy Androida i przekazuje je do standardowego potoku wejściowego Androida. Funkcje InputReaderInputDispatcher traktują je jako KeyEvents. Te z kolei wywołują zdarzenia w aplikacji na telewizor, jeśli jest ona aktywna.

Tylko wejścia systemowe telewizora mogą otrzymywać InputEvents, i to tylko wtedy, gdy mają uprawnienia systemowe RECEIVE_INPUT_EVENT. Wejście TV odpowiada za określanie, które zdarzenia InputEvent mają być wykorzystywane, i powinno zezwalać aplikacji TV na obsługę klawiszy, których nie musi wykorzystywać.

Aplikacja TV musi wiedzieć, które wejście TV systemu jest aktywne, czyli wybrane przez użytkownika, i rozróżniać przychodzące KeyEvents oraz kierować je do odpowiedniej sesji Menedżera wejść TV, wywołując dispatchInputEvent(), aby przekazać zdarzenie do powiązanego wejścia TV.

Przykład danych wejściowych MHEG-5

Ten diagram przedstawia bardziej szczegółowy widok sposobu, w jaki KeyEventssą kierowane przez interfejs TIF na Androidzie.

Przykład czerwonego przycisku na Androidzie TV
Rysunek 7. Przykład czerwonego przycisku na Androidzie TV

Przedstawia on działanie aplikacji z czerwonym przyciskiem, która jest popularna w Europie i umożliwia użytkownikom dostęp do interaktywnych aplikacji na telewizorach. Aplikację można dostarczyć za pomocą tego strumienia transportowego. Po kliknięciu tego przycisku użytkownicy mogą korzystać z tych aplikacji do transmisji. Możesz na przykład używać tych aplikacji do transmisji, aby uzyskiwać dostęp do powiązanych stron internetowych lub wyników sportowych.

W sekcji Aplikacja do transmisji znajdziesz informacje o tym, jak aplikacje do transmisji współpracują z aplikacją TV.

W tym przykładzie:

  1. Aplikacja TV jest aktywna i otrzymuje wszystkie klucze.
  2. KeyEvents (np.czerwony przycisk) jest przekazywany do aktywnego telewizora jako sygnał wejściowy InputEvents..
  3. Systemowe wejście TV jest zintegrowane ze stosem MHEG-5 i ma uprawnienie systemowe RECEIVE_INPUT_EVENT.
  4. Po otrzymaniu kodu aktywacyjnego (np. przycisku czerwonego) wejście telewizora aktywuje aplikację do transmisji.
  5. Wejście TV zużywa KeyEvents jako InputEvents i aplikacja do transmisji jest aktywna i obsługuje InputEvents do momentu zamknięcia.

Uwaga: wejścia telewizora innych firm nigdy nie otrzymują kluczy.

Warstwa HAL wejścia TV

TV Input HAL ułatwia tworzenie wejść TV, które umożliwiają dostęp do sprzętu przeznaczonego do telewizji. Podobnie jak w przypadku innych warstw HAL Androida, warstwa HAL wejścia TV (tv_input) jest dostępna w drzewie źródłowym AOSP, a dostawca opracowuje jej implementację.

Uwaga: od Androida 14 interfejs HAL wejścia TV jest definiowany za pomocą AIDL.

Aplikacja TV

Aplikacja systemowa TV wyświetla użytkownikowi treści telewizyjne na żywo. Wraz z platformą Android udostępniana jest referencyjna aplikacja TV (Live TV), którą producenci urządzeń mogą wykorzystywać w niezmienionej postaci, dostosowywać, rozszerzać lub zastępować. Kod źródłowy jest dostępny w ramach Projektu Android Open Source. Możesz zacząć z niego korzystać, czytając artykuł Aplikacja referencyjna na telewizor.

Producenci urządzeń mogą rozszerzać swoje aplikacje telewizyjne, aby wdrażać funkcje specyficzne dla producenta urządzenia lub kraju, ale nie jest to objęte zakresem TIF ani referencyjnej aplikacji telewizyjnej.

Aplikacja systemowa TV App musi co najmniej wykonywać te zadania:

Instalacja i konfiguracja

  • Automatyczne wykrywanie wejść telewizora
  • Umożliwianie wejściom TV inicjowania konfiguracji kanałów
  • Zarządzanie ustawieniami rodzicielskimi
  • Edytuj kanały

Wyświetlam

  • Dostęp do wszystkich kanałów telewizyjnych i poruszanie się po nich
  • Dostęp do paska informacji o programie telewizyjnym
  • wyświetlać dane elektronicznego przewodnika po programach (EPG);
  • Obsługa wielu ścieżek audio i napisów
  • Podaj kod PIN kontroli rodzicielskiej
  • Zezwalaj na nakładkę interfejsu wejścia TV dla standardu TV (HbbTV itp.)
  • wypełnianie wyników wyszukiwania kanałów i programów telewizyjnych;
  • Wyświetlanie kart z linkami do aplikacji
  • Obsługa interfejsów API przesunięcia w czasie
  • obsługiwać funkcje DVR i interfejsy API nagrywania telewizji;

Ten zestaw funkcji będzie się zwiększać wraz z nowymi wersjami Androida, w których rozszerzane są interfejsy API TIF platformy. Weryfikator CTS zapewnia pokrycie testami zgodności.

Obsługa wejść TV innych firm

Android TV udostępnia interfejsy API dla deweloperów, którzy chcą tworzyć wejścia TV innych firm. Dzięki temu zainstalowane aplikacje mogą dostarczać kanały oprogramowania do telewizji na żywo. Aby zapewnić zgodność z urządzeniem z Androidem, systemowa aplikacja TV ma pewne obowiązki związane z udostępnianiem użytkownikowi wejść i kanałów telewizyjnych innych firm. Referencyjna aplikacja TV na żywo zapewnia zgodną implementację. Jeśli producenci urządzeń zastępują systemową aplikację TV, muszą zadbać o to, aby ich własne aplikacje zapewniały podobną zgodność, aby spełniać oczekiwania deweloperów na wszystkich urządzeniach z Androidem TV.

Aplikacja systemowa TV musi wyświetlać wejścia innych firm obok domyślnej usługi telewizji na żywo urządzenia. Interfejsy API dla deweloperów mają zapewnić użytkownikom możliwość znajdowania kanałów (po ich zainstalowaniu) w standardowym interfejsie telewizora.

Wizualne rozróżnianie kanałów wbudowanych i kanałów innych firm jest dozwolone zgodnie z definicją w sekcji aplikacji TV w CDD Androida.

W sekcjach poniżej znajdziesz informacje o tym, jak aplikacja Telewizja na żywo spełnia wymagania CDD.

Konfiguracja nowego kanału

Dodawanie nowych wejść/kanałów innych firm rozpoczyna się od znalezienia i zainstalowania przez użytkownika wejścia TV ze sklepu z aplikacjami, takiego jak Google Play.

Niektóre wejścia telewizora innych firm automatycznie dodają kanały do bazy danych TvProvider. Większość z nich udostępnia jednak aktywność Konfiguracja, która umożliwia użytkownikowi skonfigurowanie kanałów, podanie danych logowania i wykonanie innych czynności. Aplikacja systemowa TV musi zapewnić użytkownikowi możliwość aktywowania tej aktywności konfiguracji, dlatego CDD wymaga, aby wejścia innych firm były oddalone od głównej aplikacji TV o minimalną liczbę działań nawigacyjnych.

Referencyjna aplikacja Telewizja na żywo zawiera menu Źródła kanałów, które umożliwia dostęp do wejść.

Otwórz Ustawienia
Rysunek 8. Otwórz Ustawienia.

Otwórz Źródło kanału w Ustawieniach
Rysunek 9. Otwórz Źródła kanałów w Ustawieniach.

Wybierz źródło z listy.
Rysunek 10. Wybierz źródło z listy.

Dodawanie kanałów ze źródła
Rysunek 11. Dodaj kanały ze źródła.

Po zainstalowaniu nowego elementu TvInput u góry menu aplikacji TV wyświetla się karta powiadomienia, która umożliwia użytkownikowi bezpośrednie przejście do konfiguracji:

Powiadomienie informujące o dostępności nowych źródeł kanałów.
Rysunek 12. Powiadomienie informujące o dostępności nowych źródeł kanałów.

Jeśli użytkownik podejmie działanie za pomocą powiadomienia, może skonfigurować źródła, jak pokazano na ilustracji 10.

Więcej informacji o oczekiwaniach deweloperów w tym zakresie znajdziesz w artykule Określanie usługi wejścia TV.

Dostosowywanie listy kanałów

Producenci urządzeń mogą udostępniać interfejs użytkownika, który umożliwia ukrywanie niektórych kanałów i zarządzanie własnymi przewodnikami po programach. Telewizja na żywo obejmuje tę funkcję.

Otwórz listę kanałów w Ustawieniach.
Rysunek 13. Otwórz listę kanałów w Ustawieniach.

Dostosuj listę kanałów.
Rysunek 14. Dostosuj listę kanałów.

EPG

Deweloperzy zewnętrznych metod wprowadzania danych muszą mieć pewność, że użytkownicy mogą łatwo przechodzić do ich kanałów podczas ogólnego korzystania ze wszystkich zgodnych urządzeń z Androidem TV.

Kanały z wejść innych firm muszą być prezentowane w ramach standardowego elektronicznego przewodnika po programach telewizji na żywo na urządzeniu. Można zastosować wizualne rozdzielenie lub osobne kategorie dla kanałów innych firm (patrz sekcja Aplikacja TV w CDD Androida). Najważniejsze jest to, aby użytkownicy mogli znaleźć zainstalowane kanały.

Aby zapewnić użytkownikom jak największą wygodę, producenci muszą wdrożyć aplikację TV, która będzie zawierać wyniki wyszukiwania dla globalnych zapytań. Live TV udostępnia implementację (patrz ), która zapewnia wyniki z zewnętrznych danych wejściowych (wymaganych do zgodności z platformą) oraz wbudowanych danych wejściowych.

Przesunięcie w czasie

W przypadku urządzeń z Androidem 6.0 lub nowszym aplikacja TV musi obsługiwać interfejsy API przesunięcia w czasie w ramach Androida. Dodatkowo producenci muszą zaimplementować w aplikacji na telewizorze elementy sterujące odtwarzaniem, które umożliwiają użytkownikom wstrzymywanie, wznawianie, przewijanie do tyłu i przewijanie do przodu odtwarzania.

W przypadku wejść telewizyjnych obsługujących przesunięcie w czasie aplikacja TV musi wyświetlać elementy sterujące odtwarzaniem.

Elementy sterujące odtwarzaniem
Rysunek 15. Elementy sterujące odtwarzaniem

DVR

W przypadku urządzeń z Androidem 7.0 lub nowszym aplikacja TV musi obsługiwać interfejsy API nagrywania TV w ramach Androida, aby obsługiwać, wyświetlać i odtwarzać nagrane programy.

Dzięki temu producenci urządzeń mogą podłączać swoje podsystemy DVR do TIF i znacznie ograniczać wysiłek związany z integracją, który jest potrzebny do włączenia lub zintegrowania funkcji DVR na telewizorze. Umożliwia też firmom zewnętrznym dostarczanie systemów DVR, które można podłączyć do urządzenia z Androidem TV.

Oprócz nagrywania treści na żywo aplikacja TV obsługuje też konflikty zasobów. Jeśli na przykład urządzenie ma 2 tunery, może nagrywać 2 programy w tym samym czasie. Jeśli użytkownik poprosi o nagranie 3 programów, aplikacja telewizyjna musi rozwiązać konflikt i wyświetlić powiadomienie lub poprosić użytkownika o ustalenie priorytetu tych żądań.

Aplikacje na telewizory mogą też wdrażać bardziej zaawansowaną logikę, np. pytać użytkownika, czy chce nagrywać wszystkie przyszłe odcinki serialu, gdy poprosi o nagranie jednego odcinka.

Na poniższym diagramie przedstawiono możliwą implementację nagrywarki cyfrowej na Androidzie TV.

Cyfrowe nagrywanie wideo na Androidzie TV
Rysunek 16. Nagrywanie cyfrowe w Androidzie TV

  1. Usługa wejścia TV informuje aplikację TV o liczbie dostępnych tunerów, aby mogła ona rozwiązywać ewentualne konflikty zasobów.
  2. Aplikacja TV otrzymuje żądanie nagrania programu telewizyjnego zainicjowane przez użytkownika.
  3. Aplikacja TV przechowuje harmonogram nagrywania w swojej wewnętrznej bazie danych.
  4. Gdy nadejdzie czas nagrywania, aplikacja TV przesyła żądanie dostrojenia do kanału powiązanego z nagraniem.
  5. Usługa wejścia TV otrzymuje to żądanie, odpowiada, czy są dostępne odpowiednie zasoby, i przełącza się na kanał.
  6. Następnie aplikacja TV przekazuje żądanie rozpoczęcia nagrywania do Menedżera wejść TV.
  7. Usługa wejścia telewizyjnego odbiera to żądanie i rozpoczyna nagrywanie.
  8. Usługa wejścia TV przechowuje rzeczywiste dane wideo w pamięci, która może być zewnętrzna lub w chmurze.
  9. Gdy nadejdzie czas zakończenia nagrywania, aplikacja TV przekazuje żądanie zatrzymania nagrywania do Menedżera wejść TV.
  10. Gdy usługa wejścia TV otrzyma żądanie, zatrzyma nagrywanie i doda powiązane metadane do dostawcy telewizji, aby aplikacja TV mogła wyświetlać nagranie użytkownikom na żądanie.

Więcej informacji o wdrażaniu funkcji nagrywania w usłudze wejścia telewizyjnego znajdziesz w tym artykule o nagrywaniu telewizji.

Przydatne materiały

  • Ostatecznymi źródłami informacji są dokument CDD Androida i udokumentowane interfejsy API dla programistów.
  • Weryfikator CTS korzysta z interfejsów API w ramach programu testów zgodności. Przeprowadzenie tego testu w przypadku Live TV może być przydatnym sposobem na sprawdzenie wymagań dotyczących EPG, wyszukiwania, kontroli rodzicielskiej i innych w kontekście danych wejściowych pochodzących od innych firm.
  • Więcej informacji o oczekiwaniach deweloperów w tym zakresie znajdziesz w artykule Definiowanie usługi wejścia TV.

Kontrola rodzicielska

Kontrola rodzicielska umożliwia użytkownikowi blokowanie niechcianych kanałów i programów, ale można ją obejść, wpisując kod PIN.

Odpowiedzialność za funkcję kontroli rodzicielskiej jest dzielona między aplikację telewizyjną, usługę Menedżera wejść telewizyjnych, dostawcę telewizji i wejście telewizyjne.

Kontrola rodzicielska jest obowiązkowa i jest objęta weryfikacją CTS.

W wielu krajach obowiązują systemy ocen, z których wejścia TV mogą korzystać za pomocą interfejsu TVContentRating API. Dodatkowo wejścia TV mogą rejestrować własne niestandardowe systemy ocen, co pokazano w teście CTS Verifier, który wprowadza „fałszywą” ocenę. W krajach, w których obowiązuje standardowy system ocen, producenci urządzeń powinni łączyć kontrolę rodzicielską w ramach TV Input Framework z innymi mechanizmami, które mogą być dostępne.

Dostawca telewizji

Każdy wiersz kanału ma pole COLUMN_LOCKED, które służy do blokowania dostępu do określonych kanałów bez konieczności wpisywania kodu PIN. Pole programuCOLUMN_CONTENT_RATING jest przeznaczone do wyświetlania i nie służy do egzekwowania kontroli rodzicielskiej.

Menedżer wejść TV

Menedżer wejść TV przechowuje wszystkie zablokowane TvContentRating i odpowiada na isRatingBlocked(), aby poinformować, czy treści o danym poziomie oceny powinny być blokowane.

Wejście TV

Wejście TV sprawdza, czy bieżące treści powinny być blokowane, wywołując funkcję isRatingBlocked() w menedżerze wejść TV, gdy zmieni się ocena wyświetlanych treści (przy zmianie programu lub kanału) lub gdy zmienią się ustawienia kontroli rodzicielskiej (w przypadku ACTION_BLOCKED_RATINGS_CHANGEDACTION_PARENTAL_CONTROLS_ENABLED_CHANGED). Jeśli treści powinny być blokowane, wejście TV wyłącza dźwięk i obraz i powiadamia aplikację TV, że bieżące treści są blokowane, wywołując funkcję notifyContentBlocked(TvContentRating). Jeśli treści nie powinny być blokowane, wejście TV włącza dźwięk i obraz oraz powiadamia aplikację TV, że bieżące treści są dozwolone, wywołując funkcję notifyContentAllowed().

Aplikacja TV

Aby obsługiwać interfejsy API kontroli rodzicielskiej, a tym samym stworzyć zgodną platformę, systemowa aplikacja TV musi umożliwiać użytkownikom zarządzanie kontrolą rodzicielską, w tym niestandardowymi ocenami zarejestrowanymi przez poszczególne aplikacje.

Aplikacja TV wyświetla interfejs kodu PIN, gdy otrzyma od wejścia TV powiadomienie, że bieżące treści są zablokowane, lub gdy użytkownik próbuje wyświetlić zablokowany kanał.

Aplikacja TV nie przechowuje bezpośrednio ustawień kontroli rodzicielskiej. Gdy użytkownik zmieni ustawienia kontroli rodzicielskiej, wszystkie zablokowaneTvContentRating są przechowywane przez menedżera wejść TV, a zablokowane kanały są przechowywane przez dostawcę sygnału telewizyjnego.

Aplikacja TV musi zadeklarować uprawnienie android.permission.MODIFY_PARENTAL_CONTROLS, aby móc zmieniać ustawienia kontroli rodzicielskiej.

Zachęcamy producentów urządzeń do:

  • Przeprowadź test kontroli rodzicielskiej CTS Verifier na referencyjnej aplikacji telewizji na żywo, aby zademonstrować wymagania dotyczące zgodności.
  • Użyj aplikacji Live TV jako odniesienia dla własnej aplikacji TV, w szczególności zobacz źródła ContentRatingsManager RatingSystemsFragment oraz sposób, w jaki obsługują one niestandardowe oceny.

HDMI-CEC

HDMI-CEC umożliwia sterowanie jednym urządzeniem za pomocą drugiego, dzięki czemu jeden pilot może obsługiwać wiele urządzeń w kinie domowym. Jest używana przez Androida TV do przyspieszania konfiguracji i umożliwiania zdalnego sterowania różnymi wejściami telewizora za pomocą centralnej aplikacji TV. Może na przykład przełączać wejścia, włączać i wyłączać urządzenia itp.

Android TIF implementuje HDMI-CEC jako usługę sterowania HDMI, dzięki czemu producenci urządzeń muszą jedynie opracować sterowniki niskiego poziomu, które współpracują z uproszczoną warstwą HAL Androida TV, pomijając bardziej złożoną logikę biznesową. Wprowadzając standardową implementację, Android stara się ograniczyć problemy z kompatybilnością, zmniejszając liczbę rozdrobnionych implementacji i selektywne wsparcie funkcji. Usługa sterowania HDMI korzysta z dotychczasowych usług Androida, w tym wejścia i zasilania.

Oznacza to, że dotychczasowe implementacje HDMI-CEC będą musiały zostać przeprojektowane, aby współpracować z Android TIF. Zalecamy, aby platforma sprzętowa zawierała mikroprocesor do odbierania poleceń włączania zasilania CEC i innych poleceń.

Integracja CEC na Androidzie TV
Rysunek 17. Integracja CEC na Androidzie TV

  1. Magistrala CEC odbiera polecenie od aktualnie aktywnego źródła, aby przełączyć się na inne źródło.
  2. Sterownik przekazuje polecenie do warstwy HAL HDMI-CEC.
  3. HAL powiadamia wszystkie ActiveSourceChangeListeners.
  4. Usługa sterowania HDMI jest powiadamiana o zmianie źródła za pomocą ActiveSourceChangeListener.
  5. Usługa Menedżer wejść telewizora generuje intencję dla aplikacji telewizyjnej, aby przełączyć źródło.
  6. Aplikacja TV tworzy sesję Menedżera wejść TV dla wejścia TV, na które następuje przełączenie, i wywołuje w tej sesji funkcję setMain.
  7. Sesja Menedżera wejść telewizora przekazuje te informacje do wejścia HDMI telewizora.
  8. Wejście HDMI telewizora wysyła żądanie ustawienia powierzchni pasma bocznego.
  9. Gdy powierzchnia jest ustawiona, usługa TV Input Manager Service generuje odpowiednie polecenie sterowania routingiem i wysyła je z powrotem do usługi HDMI Control Service.

Wytyczne dotyczące integracji z telewizorami

Aplikacja do transmisji

Każdy kraj ma własne wymagania dotyczące transmisji (MHEG, teletekst, HbbTV itp.), dlatego producenci powinni dostarczać własne rozwiązania dla aplikacji do transmisji, np.:

  • MHEG: stos natywny
  • Telegazeta: stos natywny
  • HbbTV: rozwiązanie HbbTV od 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 w przypadku regionalnych stosów telewizyjnych, przekazywać powierzchnię do stosów oprogramowania telewizyjnego lub przekazywać niezbędny kod klucza do interakcji ze starszymi stosami.

Oto jak współdziałają aplikacja do transmisji i aplikacja TV:

  1. Aplikacja TV jest aktywna i odbiera wszystkie klawisze.
  2. Aplikacja TV przekazuje klucze (np. czerwony przycisk) do urządzenia wejściowego TV.
  3. Urządzenie wejściowe TV jest wewnętrznie zintegrowane ze starszym stosem TV.
  4. Po otrzymaniu kodu aktywacyjnego (np. przycisku czerwonego) urządzenie wejściowe telewizora aktywuje aplikacje do transmisji.
  5. Aplikacja do transmisji przejmuje kontrolę nad aplikacją TV i obsługuje działania użytkownika.

W przypadku wyszukiwania głosowego lub rekomendacji aplikacja do transmisji może obsługiwać wyszukiwanie w aplikacji.