Rama wejścia telewizyjnego

Ikona HAL Android TV

Platforma Android TV Input Framework (TIF) upraszcza dostarczanie treści na żywo do Android TV. Android TIF zapewnia producentom standardowy interfejs API do tworzenia modułów wejściowych do sterowania Android TV i umożliwia wyszukiwanie telewizji na żywo oraz rekomendacje za pośrednictwem metadanych publikowanych przez wejście TV.

Ramy nie mają na celu wdrożenia standardów telewizyjnych ani wymagań regionalnych, ale ułatwiają producentom urządzeń spełnienie regionalnych standardów nadawania telewizji cyfrowej bez ponownego wdrożenia. Dokumentacja w tej sekcji może być również przydatna dla zewnętrznych twórców aplikacji, którzy chcą tworzyć niestandardowe wejścia TV.

składniki

Implementacja platformy Android TV Input Framework zawiera menedżera TV Input. TIF współpracuje z aplikacją telewizyjną, aplikacją systemową, której nie można zastąpić aplikacją innej firmy, aby uzyskać dostęp do kanałów wbudowanych i tunerów IP. Aplikacja TV komunikuje się z modułami TV Input dostarczonymi przez producenta urządzenia lub inne podmioty za pośrednictwem programu TV Input Manager.

Struktura wejścia TV składa się z:

  • Dostawca TV ( 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ę z użytkownikiem
  • TV Input Manager ( android.media.tv.TvInputManager ): umożliwia komunikację wejść TV 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 umożliwia systemowym wejściam TV 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: struktura dla wbudowanego tunera telewizyjnego
  • MediaCas: ramy dostępu warunkowego
  • Tuner Resource Manager: usługa do zarządzania zasobami sprzętowymi dla wejścia TV, MediaCas i wbudowanego tunera

Te elementy zostały szczegółowo omówione poniżej. Poniższy diagram zawiera szczegółowy widok architektury Android TV Input Framework.

Przegląd architektury Android TIF
Rysunek 1. Architektura Android TV Input Framework (TIF)

Pływ

Oto jak ćwiczona jest architektura:

  1. Użytkownik widzi i wchodzi w interakcję z aplikacją telewizyjną, aplikacją systemową, której nie można zastąpić aplikacją innej firmy.
  2. Aplikacja TV wyświetla zawartość AV z wejścia TV.
  3. 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ścia TV poniżej.

Uprawnienia

  • Tylko wejścia signatureOrSystem TV i aplikacja TV mają pełny dostęp do bazy danych dostawcy TV i są w stanie odbierać KeyEvents.
  • Tylko systemowe wejścia TV mogą uzyskać dostęp do warstwy HAL wejścia TV za pośrednictwem usługi TV Input Manager. Dostęp do wejść TV można uzyskać jeden-do-jednego za pośrednictwem sesji TV Input Manager.
  • Wejścia telewizyjne innych firm mają zablokowany pakietowo dostęp do bazy danych dostawcy telewizji i mogą odczytywać/zapisywać tylko pasujące wiersze pakietów.
  • Wejścia telewizyjne innych firm mogą wyświetlać własną zawartość lub zawartość z wejść telewizyjnych producenta urządzenia, takich jak HDMI1. Nie mogą wyświetlać treści z wejść TV nieprzejściowych, takich jak wbudowany tuner lub tuner IPTV.
  • Uprawnienie TV_INPUT_HARDWARE dla sprzętowej aplikacji TV Input sygnalizuje usłudze TV Input Manager, aby podczas rozruchu powiadomiła usługę TV Input, aby wywołała usługę TV Input Manager i dodała jej wejścia TV. To uprawnienie umożliwia sprzętowej aplikacji wejścia telewizyjnego obsługę wielu wejść telewizyjnych na usługę wejścia telewizyjnego, a także dynamiczne dodawanie i usuwanie obsługiwanych wejść telewizyjnych.

Dostawca telewizji

Baza danych dostawcy telewizji przechowuje kanały i programy z wejść telewizyjnych. Dostawca telewizji również publikuje i zarządza powiązanymi uprawnieniami, tak aby wejścia telewizyjne mogły widzieć tylko własne nagrania. Na przykład określone wejście TV może widzieć tylko dostarczone przez siebie kanały i programy i nie ma dostępu do kanałów i programów innych wejść TV.

Dostawca TV mapuje wewnętrznie „gatunek nadawania” na „gatunek kanoniczny”. Wejścia telewizyjne są odpowiedzialne za wypełnianie „gatunku nadawania” wartością w podstawowym standardzie nadawania, a pole „gatunek kanoniczny” zostanie automatycznie wypełnione poprawnym 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 TV wypełni pole „gatunek kanoniczny” zmapowana wartość android.provider.TvContract.Genres.SPORTS .

Zobacz poniższy diagram, aby zobaczyć szczegółowy widok dostawcy telewizji.

Dostawca Android TV
Rysunek 2. Dostawca Android TV

Tylko aplikacje z uprzywilejowanej partycji systemowej mogą odczytywać całą bazę danych dostawcy telewizji.

Wejścia telewizji przelotowej nie przechowują kanałów i programów.

Oprócz standardowych pól dla kanałów i programów, baza danych dostawcy TV oferuje również pole typu BLOB, COLUMN_INTERNAL_PROVIDER_DATA , w każdej tabeli, której wejścia TV mogą używać do przechowywania dowolnych danych. Te dane BLOB mogą zawierać informacje niestandardowe, takie jak częstotliwość skojarzonego tunera i mogą być dostarczane w buforze protokołu lub w innej formie. Pole z możliwością wyszukiwania jest dostępne, aby niektóre kanały były niedostępne podczas wyszukiwania (np. aby spełnić wymagania dotyczące ochrony treści obowiązujące w danym kraju).

Przykłady pól bazy danych

Dostawca TV 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 i aplikacji systemowych, takich jak aplikacja TV. Tabele te mają cztery rodzaje pól:

  • Wyświetlanie: pola wyświetlania zawierają informacje, które aplikacje mogą chcieć udostępnić użytkownikowi, takie jak nazwa kanału ( COLUMN_DISPLAY_NAME ), 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 użycia wejść TV.
    Niektóre pola, takie jak COLUMN_INTERNAL_PROVIDER_DATA , to konfigurowalne pola BLOB, w których wejście TV może przechowywać dowolne metadane dotyczące ich kanału lub programu.
  • Flaga: pola flag określają, czy kanał powinien być ograniczony do wyszukiwania, przeglądania lub przeglądania. Można to ustawić tylko na poziomie kanału. Wszystkie programy zależą od ustawienia 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. Ograniczanie 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 jest na powierzchni aplikacji TV, aplikacji systemowych lub wejść TV.

  • Każdy wiersz ma PACKAGE_NAME , pakiet (aplikację), który jest właścicielem tego wiersza, sprawdzany w zapytaniu, wstawieniu, aktualizacji przez TvProvider.java. Wejście TV może uzyskiwać dostęp tylko do informacji, które napisało i jest oddzielone od informacji dostarczanych przez inne wejścia TV.
  • Uprawnienia do odczytu i zapisu przez AndroidManifest.xml (wymaga zgody użytkownika) w celu określenia dostępnych kanałów.
  • Tylko aplikacje signatureOrSystem mogą uzyskać uprawnienia ACCESS_ALL_EPG_DATA dostępu do całej bazy danych.

Menedżer wejścia telewizyjnego

TV Input Manager zapewnia centralny systemowy interfejs API dla całej platformy Android TV Input Framework. Zarządza interakcję między aplikacjami a wejściami telewizyjnymi i zapewnia funkcję kontroli rodzicielskiej. Sesje TV Input Manager muszą być tworzone jeden-do-jednego za pomocą wejść TV. TV Input Manager umożliwia dostęp do zainstalowanych wejść TV, 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 telewizyjne może być dostrojone przez aplikację telewizyjną tylko do identyfikatorów URI dodanych do bazy danych dostawcy telewizji, z wyjątkiem przelotowych wejść telewizyjnych, które można dostroić za pomocą TvContract.buildChannelUriForPassthroughInput() . Wejście TV może również mieć ustawioną głośność. Wejścia telewizyjne dostarczone i podpisane przez producenta urządzenia (aplikacje do podpisów) 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 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 w celu wywołania zwrotnego po zmianie stanu wejścia telewizyjnego lub po dodaniu lub usunięciu wejścia telewizyjnego. Na przykład aplikacja telewizyjna może reagować, gdy wejście telewizyjne jest odłączone, wyświetlając je jako odłączone i uniemożliwiając jego wybór.

TV Input Manager ogranicza komunikację między aplikacją telewizyjną a wejściami TV. Standardowy interfejs programu TV Input Manager i TV Input umożliwia wielu producentom urządzeń tworzenie własnych aplikacji telewizyjnych, jednocześnie pomagając wszystkim zewnętrznym wejściom telewizyjnym działać we wszystkich aplikacjach telewizyjnych.

Wejścia telewizyjne

Wejścia telewizyjne to aplikacje na Androida w tym sensie, że mają plik AndroidManifest.xml i są instalowane (przez Play, preinstalowane lub ładowane z boku). Android TV obsługuje wstępnie zainstalowane aplikacje systemowe, aplikacje podpisane 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ć dostarczone tylko przez producenta, ponieważ łączą się bezpośrednio z podstawowym sprzętem. Inne, takie jak IPTV, zmiana miejsca i zewnętrzne STB, mogą być dostarczane przez strony trzecie jako pakiety APK w Google Play Store. Po pobraniu i zainstalowaniu nowe wejście można wybrać w aplikacji TV.

Przykład wprowadzania przekazującego

Wejście systemu Android TV
Rysunek 3. Wejście systemu Android TV

W tym przykładzie wejście telewizyjne dostarczone przez producenta urządzenia jest zaufane i ma pełny dostęp do dostawcy telewizji. Jako przelotowe 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 danych wejściowych przekazywania, użyj metody narzędzia android.media.tv.TvContract buildChannelUriForPassthroughInput(String inputId) . Aplikacja TV komunikuje się z TV Input Manager, aby uzyskać dostęp do wejścia HDMI TV.

Przykład wbudowanego tunera

Wbudowane wejście tunera TV z systemem Android
Rysunek 4. Wejście wbudowanego tunera Android TV

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

Przykład danych wejściowych innej firmy

Wejście innych producentów Android TV
Rysunek 5. Wejście innej firmy w Android TV

W tym przykładzie zewnętrzne wejście telewizyjne STB jest dostarczane przez inną firmę. Ponieważ to wejście TV nie może bezpośrednio uzyskać dostępu do sygnału wideo HDMI, musi przejść przez Menedżera wejścia TV i użyć wejścia HDMI TV dostarczonego przez producenta urządzenia.

Za pomocą programu TV Input Manager zewnętrzne wejście telewizyjne STB może komunikować się z wejściem telewizora HDMI i prosić je o pokazanie wideo na HDMI1. Dzięki temu wejście telewizyjne STB może sterować telewizorem, podczas gdy dostarczone przez producenta wejście HDMI TV renderuje wideo.

Przykład obrazu w obrazie (PIP)

Android TV KeyEvents
Rysunek 6. Android TV KeyEvents

Powyższy schemat pokazuje, w jaki sposób przyciski pilota są przekazywane do określonego wejścia telewizora w celu wyświetlania obrazu w obrazie (PIP). Te naciśnięcia przycisków są interpretowane przez sterownik sprzętowy dostarczony przez producenta urządzenia, konwertując skany sprzętowe na kody klawiszy systemu Android i przekazując je do standardowego potoku wejściowego systemu Android InputReader i InputDispatcher jako funkcji KeyEvents . Te z kolei wyzwalają zdarzenia w aplikacji telewizyjnej, jeśli jest w centrum uwagi.

Tylko systemowe wejścia telewizyjne mogą otrzymywać InputEvents i tylko wtedy, gdy mają uprawnienie systemowe RECEIVE_INPUT_EVENT . Wejście TV jest odpowiedzialne za określenie, które zdarzenia InputEvent mają zostać wykorzystane i powinno umożliwić aplikacji TV obsługę kluczy, których nie potrzebuje.

Aplikacja telewizyjna jest odpowiedzialna za informację, które systemowe wejście TV jest aktywne, co oznacza wybrane przez użytkownika, oraz za rozróżnienie przychodzących KeyEvents i przekierowanie ich do właściwej sesji Menedżera wejść TV, wywołując metodę dispatchInputEvent() , aby przekazać zdarzenie do powiązanego wejścia TV .

Przykład wejścia MHEG-5

Poniższy diagram przedstawia bardziej szczegółowy widok sposobu kierowania KeyEvents przez Android TIF.

Przykładowy czerwony przycisk Android TV
Rysunek 7. Przykładowy czerwony przycisk Android TV

Przedstawia działanie aplikacji z czerwonym przyciskiem, popularnej w Europie, która umożliwia użytkownikom dostęp do interaktywnych aplikacji na ich 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 współdziałają z aplikacją telewizyjną.

W tym przykładzie:

  1. Aplikacja TV jest w centrum uwagi i odbiera wszystkie klucze.
  2. KeyEvents (np. czerwony przycisk) są przekazywane do aktywnego wejścia TV jako InputEvents.
  3. Systemowe wejście TV integruje się ze stosem MHEG-5 i posiada uprawnienia systemowe RECEIVE_INPUT_EVENT .
  4. Po otrzymaniu kodu aktywacyjnego (np. czerwony przycisk), wejście TV aktywuje aplikację do transmisji.
  5. Wejście TV wykorzystuje KeyEvents jako InputEvents , a aplikacja do transmisji jest skupiona i obsługuje InputEvents do momentu odrzucenia.

Uwaga : Wejścia telewizyjne innych firm nigdy nie odbierają kluczy.

Wejście TV HAL

Wejście TV HAL wspomaga rozwój 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ódłowym 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 (telewizja na żywo), która może być używana bez zmian, dostosowywana, rozszerzana lub zastępowana przez producentów urządzeń. Kod źródłowy jest dostępny w projekcie Android Open Source i możesz zacząć od niego w artykule o aplikacji Reference TV .

Producenci urządzeń mogą rozszerzyć swoje aplikacje telewizyjne w celu wdrożenia funkcji określonych przez producenta urządzenia lub kraj, jednak nie jest to objęte zakresem TIF ani referencyjnej aplikacji telewizyjnej.

Systemowa aplikacja TV musi obsługiwać co najmniej następujące zadania:

Konfiguracja i konfiguracja

  • Automatyczne wykrywanie wejść TV
  • Pozwól wejść TV zainicjować konfigurację kanałów
  • Kontroluj ustawienia rodzicielskie
  • Edytuj kanały

Przeglądanie

  • Uzyskaj dostęp i nawiguj po wszystkich kanałach telewizyjnych
  • Uzyskaj dostęp do paska informacji o programie telewizyjnym
  • Wyświetlanie danych elektronicznego przewodnika po programowaniu (EPG)
  • Obsługa wielu ścieżek audio i napisów
  • Podaj wyzwanie kodu PIN kontroli rodzicielskiej
  • Zezwalaj na nakładkę interfejsu wejścia TV dla standardu TV (HbbTV itp.)
  • Wypełnij wyniki wyszukiwania kanałów i programów telewizyjnych
  • Wyświetl karty łączące aplikacje
  • Obsługa interfejsów API do zmiany czasu
  • Obsługa funkcji DVR i obsługa interfejsów API nagrywania telewizji

Ten zestaw funkcji będzie się powiększał wraz z nowymi wersjami Androida, w których rozszerzono interfejsy API platformy TIF. CTS Verifier zapewnia pokrycie 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 TV na żywo zapewnia kompatybilną implementację; w przypadku wymiany systemowej aplikacji telewizyjnej producenci urządzeń muszą zapewnić, że ich własne aplikacje zapewniają podobną zgodność, aby spełnić oczekiwania programistów we wszystkich urządzeniach z systemem Android TV.

Systemowa aplikacja telewizyjna musi udostępniać dane wejściowe innych firm obok domyślnej usługi 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.

Wizualne rozróżnienie między kanałami wbudowanymi a kanałami innych firm jest dozwolone, zgodnie z definicją w sekcji aplikacji telewizyjnej na Androidzie CDD.

Poniższe sekcje pokazują, w jaki sposób 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 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ść zapewni działanie konfiguracji, aby umożliwić użytkownikowi skonfigurowanie kanałów, podanie danych logowania i inne działania. Systemowa aplikacja telewizyjna musi zapewnić użytkownikowi możliwość aktywowania tej czynności konfiguracyjnej, dlatego CDD wymaga, aby wejścia innych firm były minimalne, 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ść.

Przejdź do ustawień
Rysunek 8. Przejdź do Ustawień .

Przejdź do źródła kanału w Ustawieniach
Rysunek 9. Przejdź do źródeł kanałów w Ustawieniach.

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

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

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

Dostępne są powiadomienia, które pokazują nowe źródła kanałów.
Rysunek 12. Powiadomienie, które pokazuje nowe źródła kanałów.

Jeśli użytkownik podejmie działania za pośrednictwem powiadomienia, może wybrać konfigurację swoich źródeł, jak pokazano na rysunku 10.

Zobacz Zdefiniuj usługę wprowadzania sygnału telewizyjnego, aby poznać oczekiwania programistów w tym obszarze.

Dostosuj listę kanałów

Producenci urządzeń mogą udostępniać interfejs użytkownika, aby ukryć niektóre kanały i umożliwić użytkownikom zarządzanie własnymi EPG. Telewizja na żywo obejmuje tę funkcję.

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

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

EPG

Zewnętrzni programiści wprowadzania danych muszą mieć pewność, że użytkownicy mogą łatwo nawigować do swoich kanałów podczas ogólnego użytkowania, na wszystkich zgodnych urządzeniach z Android TV.

Kanały z wejść innych firm muszą być prezentowane jako część standardowego EPG na żywo w urządzeniu. Można użyć separacji wizualnej lub oddzielnych kategorii dla kanałów innych firm (patrz sekcja aplikacji TV na CDD systemu Android) — najważniejsze jest to, że użytkownicy mogą znaleźć kanały, które zainstalowali.

Producenci muszą wdrożyć aplikację telewizyjną, aby uwzględniać wyniki wyszukiwania dla globalnych żądań wyszukiwania, aby zapewnić jak najlepsze wrażenia użytkownika. Telewizja na żywo zapewnia implementację (patrz com.android.tv.search.TvProviderSearch ), która dostarcza wyniki z danych wejściowych innych firm (wymagane dla zgodności platformy), a także z wbudowanych danych wejściowych.

Przesunięcie czasu

W przypadku urządzeń z systemem Android 6.0 lub nowszym aplikacja telewizyjna musi obsługiwać interfejsy API do zmiany czasu w systemie Android . Ponadto producenci muszą zaimplementować sterowanie odtwarzaniem w aplikacji telewizyjnej, 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 czasu aplikacja TV musi wyświetlać elementy sterujące odtwarzaniem.

Sterowanie odtwarzaniem
Rysunek 15. Sterowanie odtwarzaniem

DVR

W przypadku urządzeń z systemem Android 7.0 i nowszym aplikacja telewizyjna musi obsługiwać interfejsy API nagrywania telewizji w ramach systemu Android , aby obsługiwać, wyświetlać i odtwarzać nagrane programy.

Pozwala to producentom urządzeń na podłączenie swoich podsystemów DVR do TIF i radykalnie redukuje wysiłek związany z integracją, który jest potrzebny do włączenia lub zintegrowania funkcji DVR na urządzeniu telewizyjnym. Umożliwia również stronom trzecim dostarczanie systemów DVR na rynku wtórnym, 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 nagrywać jednocześnie dwa programy. Jeśli użytkownik poprosi o nagranie trzech, aplikacja telewizyjna musi poradzić sobie z konfliktem i powinna albo wyświetlić powiadomienie, albo poprosić użytkownika o zaplanowanie priorytetu dla tych żądań.

Aplikacje telewizyjne mogą również implementować bardziej wyrafinowaną logikę, na przykład pytanie użytkownika, czy chciałby nagrać wszystkie przyszłe odcinki serii, gdy poprosi o nagranie jednego odcinka.

Zobacz poniższy diagram, aby zapoznać się z możliwą implementacją DVR w Android TV.

Cyfrowe nagrywanie wideo w Android TV
Rysunek 16. Cyfrowe nagrywanie wideo w Android TV

  1. Usługa wejścia telewizyjnego informuje aplikację telewizyjną, ile tunerów jest dostępnych, aby aplikacja telewizyjna mogła poradzić sobie z możliwym konfliktem zasobów.
  2. Aplikacja TV odbiera zainicjowane przez użytkownika żądanie nagrania programu telewizyjnego.
  3. Aplikacja TV przechowuje harmonogram nagrywania w swojej wewnętrznej bazie danych.
  4. Gdy nadejdzie czas nagrywania, aplikacja telewizyjna przesyła żądanie dostrojenia do kanału powiązanego z nagraniem.
  5. Usługa wejścia telewizyjnego odbiera to żądanie, odpowiada, czy dostępne są odpowiednie zasoby, i dostraja się do kanału.
  6. Następnie aplikacja TV przekazuje żądanie rozpoczęcia nagrywania do programu TV Input Manager.
  7. Usługa wejścia telewizyjnego odbiera to żądanie i rozpoczyna nagrywanie.
  8. Usługa wejścia TV przechowuje rzeczywiste dane wideo w swojej pamięci, która może być pamięcią zewnętrzną lub pamięcią w chmurze.
  9. Gdy nadejdzie czas zakończenia nagrywania, aplikacja TV przekazuje żądanie zatrzymania nagrywania do programu TV Input Manager.
  10. Gdy usługa wejścia telewizyjnego otrzyma żądanie, zatrzymuje nagrywanie i dodaje powiązane metadane do dostawcy telewizji, aby aplikacja telewizyjna mogła wyświetlić nagranie użytkownikom na żądanie.

Aby uzyskać więcej informacji na temat implementacji funkcji nagrywania w usłudze wejścia telewizyjnego, zapoznaj się z tym artykułem dotyczącym nagrywania telewizji .

Przydatne zasoby

  • Android CDD i udokumentowane interfejsy API dla programistów są ostatecznymi odniesieniami.
  • CTS Verifier sprawdza interfejsy API w ramach programu testowania kompatybilności. Porównanie tego z telewizją na żywo może być użytecznym sposobem sprawdzenia EPG, wyszukiwania, kontroli rodzicielskiej i innych wymagań w kontekście danych wejściowych innych firm.
  • Zobacz Zdefiniuj usługę wprowadzania sygnału telewizyjnego, aby poznać oczekiwania programistów w tym obszarze.

Kontrola rodzicielska

Kontrola rodzicielska umożliwia użytkownikowi blokowanie niechcianych kanałów i programów, ale ominięcie blokady poprzez wprowadzenie kodu PIN.

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

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

W wielu krajach zdefiniowano systemy oceny, z których mogą korzystać wejścia telewizyjne za pośrednictwem interfejsu API TVContentRating . Ponadto wejścia telewizyjne mogą rejestrować własne niestandardowe systemy oceny, co pokazuje test CTS Verifier, który wprowadza ocenę „fałszywą”. W krajach, w których istnieje standardowy system oceny, zachęca się producentów urządzeń do łączenia kontroli rodzicielskiej TV Input Framework 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 określonych kanałów przed oglądaniem bez wprowadzania kodu PIN. Pole programu COLUMN_CONTENT_RATING jest przeznaczone do wyświetlania i nie jest używane do wymuszania kontroli rodzicielskiej.

Menedżer wejścia telewizyjnego

TV Input Manager przechowuje wszystkie zablokowane TvContentRating i odpowiada na isRatingBlocked() , aby poinformować, czy zawartość z daną oceną powinna zostać zablokowana.

Wejście telewizyjne

Wejście TV sprawdza, czy bieżąca treść powinna być zablokowana, wywołując isRatingBlocked() w Menedżerze wejścia TV, gdy zmieniła się ocena wyświetlanej treści (w przypadku zmiany programu lub kanału) lub zmieniły się ustawienia kontroli rodzicielskiej (w ACTION_BLOCKED_RATINGS_CHANGED i ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED ) . Jeśli zawartość powinna zostać zablokowana, wejście TV wyłącza dźwięk i obraz oraz powiadamia aplikację telewizyjną, że bieżąca zawartość jest zablokowana, wywołując notifyContentBlocked(TvContentRating) . Jeśli zawartość nie powinna być zablokowana, wejście TV włącza dźwięk i obraz oraz powiadamia aplikację telewizyjną, że bieżąca zawartość jest dozwolona przez wywołanie notifyContentAllowed() .

Aplikacja telewizyjna

Aby honorować interfejsy API kontroli rodzicielskiej, a tym samym stworzyć zgodną platformę, systemowa aplikacja TV musi umożliwiać użytkownikom zarządzanie kontrolą rodzicielską, w tym wszelkimi niestandardowymi ocenami zarejestrowanymi przez określone aplikacje.

Aplikacja telewizyjna wyświetla interfejs z kodem PIN, gdy zostanie powiadomiona przez wejście telewizyjne, że bieżąca zawartość jest zablokowana 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, każda zablokowana TvContentRating jest zapisywana przez TV Input Manager, a zablokowane kanały są przechowywane przez dostawcę telewizji.

Aby zmienić ustawienia kontroli rodzicielskiej, aplikacja telewizyjna musi zadeklarować uprawnienie android.permission.MODIFY_PARENTAL_CONTROLS .

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

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

HDMI-CEC

HDMI-CEC pozwala jednemu urządzeniu sterować innym, dzięki czemu pojedynczy pilot może sterować wieloma urządzeniami w kinie domowym. Jest używany przez Android TV do przyspieszenia konfiguracji i umożliwienia zdalnej kontroli nad różnymi wejściami telewizyjnymi za pośrednictwem centralnej aplikacji telewizyjnej. Na przykład może przełączać wejścia, włączać lub wyłączać urządzenia i nie tylko.

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ółdziałają z lekkim Android TV HAL, pomijając bardziej złożoną logikę biznesową. Zapewniając standardową implementację, system Android stara się złagodzić problemy ze zgodnością, zmniejszając pofragmentowane implementacje i selektywną obsługę funkcji. Usługa sterowania HDMI wykorzystuje istniejące usługi Androida, w tym wejście i zasilanie.

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

Integracja CEC na Android TV
Rysunek 17. Integracja CEC w Android TV

  1. Magistrala CEC otrzymuje polecenie z aktualnie aktywnego źródła, aby przełączyć się na inne źródło.
  2. Sterownik przekazuje polecenie do HDMI-CEC HAL.
  3. HAL powiadamia wszystkich ActiveSourceChangeListeners .
  4. Usługa sterowania HDMI jest powiadamiana o zmianie źródła za pośrednictwem ActiveSourceChangeListener .
  5. Usługa TV Input Manager generuje zamiar przełączenia źródła przez aplikację telewizyjną.
  6. Następnie aplikacja telewizyjna tworzy sesję menedżera wejścia telewizyjnego dla przełączanego wejścia telewizyjnego i wywołuje setMain w tej sesji.
  7. Sesja TV Input Manager przekazuje te informacje do wejścia HDMI TV.
  8. Wejście telewizora HDMI żąda ustawienia powierzchni pasma bocznego.
  9. Usługa TV Input Manager generuje odpowiednie polecenie sterowania routingiem z powrotem do usługi HDMI Control, gdy powierzchnia jest ustawiona.

Wytyczne dotyczące integracji telewizora

Aplikacja do transmisji

Ponieważ każdy kraj ma specyficzne wymagania dotyczące transmisji (MHEG, Teletext, HbbTV i inne), producenci powinni dostarczać własne rozwiązania dla aplikacji do transmisji, na przykład:

  • MHEG: stos natywny
  • Teletekst: natywny stos
  • HbbTV: rozwiązanie HbbTV firmy Vewd Software

W wersji Android L, Android TV oczekuje, że producenci urządzeń będą korzystać z integratorów systemów lub rozwiązań Androida dla regionalnych stosów TV, przekazywać powierzchnię do stosów oprogramowania telewizora lub przekazywać niezbędny klucz do interakcji ze starszymi stosami.

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

  1. Aplikacja telewizyjna jest w centrum uwagi i odbiera wszystkie klucze.
  2. Aplikacja TV przekazuje klawisze (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 aktywacji (np. czerwonego przycisku) urządzenie wejściowe TV aktywuje aplikacje do transmisji.
  5. Aplikacja do transmisji skupia się na aplikacji telewizyjnej i obsługuje działania użytkowników.

W przypadku wyszukiwania/rekomendacji głosowej aplikacja do transmisji może obsługiwać wyszukiwanie głosowe w aplikacji.