platforma CAS

Platforma systemów warunkowego dostępu do mediów (Media CAS) zapewnia standardowe Interfejsy API umożliwiające włączenie usług dostępu warunkowego (CA) na różnych urządzeniach z telewizją cyfrową sprzęt, w tym cyfrowe systemy kablowe, satelitarne, naziemne i IPTV, systemów uczących się. Platforma współpracuje z Platforma wejścia w Androidzie TV oraz platformę Android TV Tuner, udostępniając interfejsy API w języku Java wywoływane z aplikacji usługi TV źródła sygnału (TIS).

Oto główne cele Media CAS.

  • Udostępnij publiczny interfejs Java API i natywną platformę wtyczki, której można użyć przez zewnętrznych deweloperów i producentów OEM na potrzeby obsługi CAS w przypadku telewizji naziemnej na Androidzie.
  • Udostępnij platformę CAS w Androidzie, która umożliwi dostawcom ATV OEM współdziałanie z różnymi dostawcami CAS w spójny sposób.
  • Obsługuj wielu zewnętrznych dostawców CAS za pomocą natywnych wtyczek. Wtyczki CAS mogą używać protokołów sieciowych określonych przez dostawcę, uprawnień formaty wiadomości zarządzania (EMM) i wiadomości kontroli uprawnień (ECM). i dekoderów.
  • Obsługa zabezpieczeń sprzętowych, takich jak drabinki kluczy.
  • Obsługa zaufanych środowisk wykonawczych (TEE), takich jak TrustZone.

Obsługiwane konfiguracje

Konfiguracja tunera sprzętowego

czy sprzęt odpowiada za demultipleksowanie strumienia transportu MPEG; i deskrypcja, platforma dostrajania udostępnia dane z informacji o programie dostępu warunkowego (PSI) do Aplikacja TIS do współpracy ze sprzętowymi tunerami telewizyjnymi.

Dane PSI dostępu warunkowego obejmują deskryptory urzędów certyfikacji, ECM i dostawców usług EMM. Te umożliwia wtyczce CAS uzyskanie kluczy potrzebnych do odszyfrowania strumienie treści.

Schemat konfiguracji tunera sprzętowego.

Rysunek 1. Konfiguracja tunera sprzętowego

Konfiguracja sprzętowa może zawierać warstwę TEE, taką jak TrustZone, co pokazano na rys. 1. Jeśli nie ma warstwy TEE, klient CAS wtyczka może komunikować się z usługami klucza sprzętowego drabiny udostępnianymi przez platformy. Ze względu na różnice w tych interfejsach specyficzne dla dostawców Media CAS nie ustandaryzuje ich.

Konfiguracja oprogramowania

Przed Androidem 11 platforma Media CAS mogła być używany do przetwarzania treści opartych na oprogramowaniu, np. IPTV z IP multicast/unicast. Aplikacja TIS jest odpowiedzialna za tworzenie instancji i prawidłowe działanie i udostępnić obiekt Java Media CAS.

Do wyodrębnienia aplikacja może używać MediaExtractor lub innych parserów MPEG2-TS. Dane PSI związane z urzędami certyfikacji, takie jak deskryptory urzędów certyfikacji, ECM i dostawcy usług EMM. Jeśli aplikacja używa za pomocą platformy MediaExtractor, może on delegować sesję CAS takie jak otwarcie sesji i przetwarzanie usług EMM/ECM, MediaExtractor. MediaExtractor następnie konfiguruje sesję CAS za pomocą bezpośrednio API.

W przeciwnym razie aplikacja będzie odpowiadać za wyodrębnianie danych PSI związanych z urzędem certyfikacji oraz konfigurowanie sesji CAS za pomocą interfejsów Media CAS Java API. (na przykład gdy aplikacja używa własnego parsera MPEG2-TS).

Schemat konfiguracji tunera.

Rysunek 2. Konfiguracja wejścia IPTV, CAS i dekodera za pomocą Platforma MediaExtractor

W scenariuszu wyodrębniania oprogramowania jest to wymagane oprogramowanie lub sprzętowy obiekt dekodera dla każdej zakodowanej ścieżki, niezależnie od tego, czy ścieżka wykorzystuje bezpieczne dekodery. Przyczyna: w następujący sposób.

  • Jeśli ścieżka nie wymaga bezpiecznego dekodowania, moduł wyodrębniania odszyfrowuje do czyszczenia buforów i wyodrębniania próbek, tak jakby wyczyść strumień. Dzięki temu MediaCodec nie musi brać udziału w programie z dekodowaniem.
  • Jeśli ścieżka wymaga bezpiecznego dekodowania, wyodrębnianie może nadal potrzebujesz programu do dekodowania. Dzieje się tak, gdy strumień transportu jest zakodowane na poziomie pakietu transportowego, gdzie element składowy nagłówek strumienia (PES) jest zakodowany. Ekstraktor musi mieć dostęp do wydarzenia PES w nagłówku do pewnych informacji (na przykład prezentacji ).

    Moduł odszyfrowujący nie jest używany przez wyodrębnianie, jeśli strumień transportu to są zaszyfrowane na poziomie pakietu PES, gdzie nagłówek PES pozostaje czysty. Nie można jednak potwierdzić, kiedy następuje kodowanie, dopóki gdy przychodzi rzeczywisty zakodowany pakiet. Dla uproszczenia załóżmy, że używany jest dekoder jeśli ścieżka zostanie uznana za zakodowaną na podstawie mapowania programu (PMT).

Ograniczenia konfiguracji oprogramowania

Jeśli ścieżka wymaga bezpiecznego dekodowania, moduł odszyfrowujący musi: ostrożnie podczas odczytywania tekstu bufory. Ponieważ wymagane jest niezabezpieczone dekodowanie dźwięku, a jeśli dekodowanie wideo wymaga powinny zostać zaszyfrowane w ramach innej sesji niż dźwięk. Moduł ECM sesji musi sygnalizować wtyczce, że bezpieczny dekoder jest wymagane.

Ewentualnie wtyczka musi być w stanie niezawodnie powiązać klucz do swoich zasad zabezpieczeń. W przeciwnym razie aplikacja może łatwo pobrać za pomocą dekodera dźwięku.

Nawet jeśli sesja wymaga bezpiecznego dekodera, może się prosi o wygenerowanie niewielkiej ilości danych w celu wyczyszczenia buforów przez moduł wyodrębniający , aby przetworzyć nagłówek PES. Aby uniemożliwić złośliwej aplikacji utworzenie wtyczki zwraca całą jednostkę dostępu, wtyczka musi przeanalizować ładunek transportowy aby mieć pewność, że ładunek zaczyna się od nagłówka PES odpowiedniego strumienia typu. W przeciwnym razie wtyczka powinna odrzucić żądanie.

Sekwencja dostrajania urzędu certyfikacji

Podczas dostrajania do nowego kanału moduł TIS jest rejestrowany jako odbierający urzędy certyfikacji deskryptory, ECM i dostawcy usług EMM z platformy PSI Tuner. Deskryptor urzędu certyfikacji zawiera identyfikator systemu CA, który jednoznacznie identyfikuje dany urząd certyfikacji oraz inne dane dotyczące dostawcy. TIS wysyła zapytania do Media CAS w celu określenia, czy istnieje wtyczka CAS, która może obsłużyć deskryptor urzędu certyfikacji.

Schemat dostrajania treści CAS.

Rysunek 3. Dostrajanie treści CAS

Jeśli identyfikator systemu CAS jest obsługiwany, tworzona jest instancja Media CAS. a do wtyczki trafiają prywatne dane dostawcy z deskryptora urzędu certyfikacji. Następnie nowe sesje otwierają się w Media CAS do obsługi dźwięku i obrazu. strumienie. Nowo otwarte sesje otrzymają usług EMM i ECM dla wtyczki.

Przykładowy przepływ wtyczki CAS

TIS dostarcza moduły ECM do wtyczki CAS za pomocą interfejsów Media CAS API. Menedżer ds. zarządzania relacjami z klientami zawiera zaszyfrowane słowo kontrolne, które należy odszyfrować na podstawie informacji z dostawcy usług EMM. Wtyczka CAS określa sposób pozyskiwania danych usług EMM dotyczących zasobu na podstawie informacji o dostawcy Deskryptor urzędu certyfikacji, który jest dostarczany przez metodę setPrivateData().

Dostawcy usług EMM mogą być dostarczani w ramach strumienia treści lub poza nim przy użyciu żądania sieciowego zainicjowanego przez wtyczkę urzędu certyfikacji. TIS używa metody processEMM() dostarczania dowolnych usług EMM w paśmie do wtyczki urzędu certyfikacji.

Jeśli do uzyskania usług EMM wymagane jest żądanie sieciowe, wtyczka CA odpowiada za realizację transakcji sieciowej z serwerem licencji.

Schemat przykładowego CAS.

Rysunek 4. Przykładowa wtyczka CAS do przetwarzania usług EMM i ECM

Po otrzymaniu dostawcy usług EMM wtyczka CA analizuje go, aby uzyskać zaszyfrowany klucz do odszyfrowania słowa kontrolnego. Zaszyfrowany dostawca usług EMM klucz i zaszyfrowane słowo kontrolne mogą być wczytane do drabiny kluczy lub do odszyfrowywania słowa kontrolnego oraz kolejnych opis strumienia treści.

Media CAS Java API

Interfejs Media CAS Java API zawiera poniższe metody.

  • Wyświetl wszystkie wtyczki urzędu certyfikacji dostępne na urządzeniu.

    class MediaCas.PluginDescriptor {
      public String getName();
      public int getSystemId();
    }
    static PluginDescriptor[] enumeratePlugins();
    
  • Utwórz instancję Media CAS dla określonego systemu CA. Oznacza to, że platforma Media CAS może obsługiwać wiele systemów CAS jednocześnie.

    MediaCas(int CA_system_id);
    MediaCas(@NonNull Context context, int casSystemId,
             @Nullable String tvInputServiceSessionId,
             @PriorityHintUseCaseType int priorityHint);
    
  • Zarejestrowanie detektora zdarzeń i pozwolenie aplikacji na określenie modułu obsługi, jest używany looper.

    interface MediaCas.EventListener {
      void onEvent(MediaCas, int event, int arg, byte[] data);
      void onSessionEvent(@NonNull MediaCas mediaCas, @NonNull Session session, int event, int arg, @Nullable byte[] data);
      void onPluginStatusUpdate(@NonNull MediaCas mediaCas, @PluginStatus int status, int arg);
      void onResourceLost(@NonNull MediaCas mediaCas);
    }
    void setEventListener(MediaCas.EventListener listener, Handler handler);
    
  • Wysyłaj prywatne dane do systemu CA. Prywatne dane mogą z deskryptora urzędu certyfikacji, tabeli dostępu warunkowego lub zewnętrznych źródeł. Nie jest ona powiązana z żadną sesją.

    void setPrivateData(@NonNull byte[] data);
    
  • Przetwórz pakiet EMM.

    void processEmm(@NonNull byte[] data, int offset, int length);
    
  • Wyślij zdarzenie do systemu CA. Format zdarzenia to i nieprzezroczyste dla struktury.

    void sendEvent(int event, int arg, @Nullable byte[] data);
    
  • Zainicjuj operację obsługi administracyjnej określonego typu dla urzędu certyfikacji systemu. Gdy urządzenie rejestruje się w usłudze płatnej za pierwszym razem musi zostać udostępniony serwerowi CAS. . Podaj zestaw powiązanych parametrów urządzeniu na potrzeby obsługi administracyjnej.

    void provision(String provisionString);
    
  • Aktywuj odświeżanie uprawnień. Gdy użytkownik zasubskrybuje nowego kanału (np. odpowiadając na reklamę lub dodając kanał w elektronicznym przewodniku po programach (EPG), aplikacja powinna Klientom urzędów certyfikacji trzeba będzie odświeżyć klucze uprawnień.

    void refreshEntitlements(int refreshType);
    
  • Zamknij obiekt Media CAS.

    void close();
    
  • Otwórz sesję.

    Session openSession();
    Session openSession(@SessionUsage int sessionUsage, @ScramblingMode int scramblingMode);
    
  • Zamknij wcześniej otwartą sesję.

    void Session#close();
    
  • Podaj prywatne dane urzędu certyfikacji z deskryptora urzędu certyfikacji w PMT, którym może być od informacji o programie lub sekcji informacji o ES do sesji CAS.

    void Session#setPrivateData(@NonNull byte[] sessionId, @NonNull byte[] data);
    
  • Przetwarza pakiet ECM na sesję.

    void Session#processEcm(@NonNull byte[] data, int offset, int length);
    
  • Uzyskaj identyfikator sesji.

    byte[] Session#getSessionId();
    
  • Wyślij zdarzenie sesji do systemu CA. Format zdarzenie jest specyficzne dla schematu i jest przezroczyste dla struktury.

    void Session#sendSessionEvent(int event, int arg, @Nullable byte[] data);