CAS-Framework

Das Media CAS-Framework (Media Conditional Access Systems) bietet APIs für den bedingten Zugriff (Conditional Access, CA) auf einer Reihe von digitalen TV-Geräten Hardware, einschließlich digitaler Kabel-, Satelliten-, terrestrischer Systeme und IPTV Systeme. Das Framework arbeitet mit der Android TV Input Framework und das Android TV Tuner-Framework, Bereitstellung von Java-APIs, die von der App „TV Input Service“ (TIS) aufgerufen wurden

Die Hauptziele von Media CAS sind:

  • Öffentliches Java API und natives Plug-in-Framework bereitstellen, das verwendet werden kann von Drittentwicklern und OEMs zur Unterstützung von CAS für Fernsehübertragungen in Android.
  • Bereitstellung eines CAS-Frameworks innerhalb von Android, über das ATV-OEMs zusammenarbeiten können einheitlich mit einer Vielzahl von CAS-Anbietern zusammenarbeiten.
  • Unterstützung mehrerer CAS-Drittanbieter mithilfe nativer Plug-ins. CAS-Plug-ins können anbieterspezifische Netzwerkprotokolle, Berechtigungen Formate für Management-Nachrichten (EMM)/Berechtigungssteuerungsnachrichten (ECM) und Entschlüsselungsprogramme.
  • Sie müssen die Hardwaresicherheit wie Schlüsselleitern unterstützen.
  • Sie unterstützen vertrauenswürdige Ausführungsumgebungen wie TrustZone.

Unterstützte Konfigurationen

Hardware-Tuner-Konfiguration

Ob die Hardware für das Demultiplexing von MPEG-Transportstreams verantwortlich ist und entschlüsselndes Tuner-Framework, stellt dem Conditional Access Program-Specific Information (PSI) Daten TIS App zur Verbindung mit hardwarebasierten TV-Tunern.

PSI-Daten zum bedingten Zugriff umfassen CA-Deskriptoren, ECMs und EMMs. Diese Strukturen ermöglichen es dem CAS-Plug-in, Schlüssel abzurufen, die zum Entschlüsseln der Daten Contentstreams.

Diagramm der Hardware-Tuner-Konfiguration.

Abbildung 1: Hardware-Tuner-Konfiguration

Die Hardwarekonfiguration kann eine TEE-Schicht haben, z. B. TrustZone, Dies ist in Abbildung 1 dargestellt. Wenn keine TEE-Ebene vorhanden ist, wird ein CAS-Client kann das Plug-in mit den Hardwareschlüssel-Ladder-Diensten des Plattform. Aufgrund anbieterspezifischer Variationen dieser Oberflächen nicht standardisiert.

Softwarekonfiguration

Vor Android 11 konnte das Media CAS-Framework zur Verarbeitung softwarebasierter Inhalte, wie etwa IPTV von IP-Adressen, Multicast/Unicast. Die TIS-App ist für die Instanziierung und ordnungsgemäße Bereitstellung des Media CAS-Java-Objekts

Die App verwendet möglicherweise MediaExtractor oder andere MPEG2-TS-Parser zum Extrahieren CA-bezogene PSI-Daten wie CA-Deskriptoren, ECMs und EMMs Wenn die App Framework MediaExtractor kann es die CAS-Sitzung z. B. das Öffnen einer Sitzung und die Verarbeitung von EMM/ECM, MediaExtractor. MediaExtractor konfiguriert dann die CAS-Sitzung mithilfe der nativen API direkt verwenden.

Andernfalls ist die App für das Extrahieren der CA-bezogenen PSI-Daten und Konfigurieren der CAS-Sitzung mithilfe der Media CAS Java APIs (z. B. wenn die App ihren eigenen MPEG2-TS-Parser verwendet).

Diagramm der Tuner-Konfiguration.

Abbildung 2: Konfiguration der IPTV-Eingabe, CAS und des Descramblers mithilfe der Framework MediaExtractor

Im Szenario des Softwareextraktors benötigt der Extraktor eine Software oder hardwarebasiertes Entschlüsselungsobjekt für jeden verschlüsselten Track, unabhängig davon, ob für den Track sichere Decoder erforderlich sind. Dies ist auf Folgendes:

  • Wenn für den Track keine sichere Decodierung erforderlich ist, entschlüsselt der Extraktor der Zugriffseinheit, um Zwischenspeicher zu löschen und Stichproben wie aus einem einen störungsfreien Stream. So muss MediaCodec nicht am Projekt beteiligt sein und entschlüsseln.
  • Wenn für den Track eine sichere Decodierung erforderlich ist, kann der Extraktor möglicherweise trotzdem brauchen einen Entschlüsseler. Das passiert, wenn der Transportstream auf der Ebene des Transportpakets verschlüsselt, Der PES-Header (stream) wird verschlüsselt. Der Extraktor muss auf den PES zugreifen Kopfzeile an nachgelagerte Informationen (z. B. die Präsentation Zeitstempel).

    Der Descrambler wird vom Extraktor nicht verwendet, wenn der Transportstream auf PES-Paketebene verschlüsselt, wobei der PES-Header leer gelassen wird. Sie können jedoch erst feststellen, wann die Verschlüsselung erfolgt, das verschlüsselte Paket eintrifft. Nehmen wir der Einfachheit halber an, dass ein Descrambler verwendet wird. Laut Programmzuordnung ist der Titel verschlüsselt. (PMT) bezeichnet.

Einschränkungen der Softwarekonfiguration

Wenn für den Track eine sichere Decodierung erforderlich ist, muss der Descrambler wenn ein Entschlüsselungsvorgang in die Puffer. Weil eine unsichere Audiodecodierung erforderlich ist, falls die Videodecodierung sichere Decoder verwenden, sollte er bei einer anderen Sitzung als Audio verschlüsselt werden. Das ECM für die Sitzung muss dem Plug-in signalisieren, dass ein sicherer Decoder ist erforderlich.

Alternativ muss das Plug-in in der Lage sein, zuverlässig ein Schlüssel zu seiner Sicherheitsrichtlinie. Andernfalls kann die App problemlos Frames mit dem Audio-Entscrambler ein.

Auch wenn für die Sitzung ein sicherer Decoder erforderlich ist, aufgefordert, eine kleine Datenmenge auszugeben, um Zwischenspeicher vom Extraktor zu löschen PES-Header zu verarbeiten. Um zu verhindern, dass eine schädliche App das Plug-in erstellt, die gesamte Zugriffseinheit zurückgeben, muss das Plug-in die Transportnutzlast parsen. um sicherzustellen, dass die Nutzlast mit einem PES-Header des entsprechenden Streams beginnt. Typ. Andernfalls sollte die Anfrage vom Plug-in abgelehnt werden.

CA-Abstimmungssequenz

Bei der Abstimmung auf einen neuen Kanal registriert sich das TIS-Modul für den Empfang von Zertifizierungsstellen Deskriptoren, ECMs und EMMs aus dem PSI Tuner-Framework. CA-Deskriptor enthält die System-ID der Zertifizierungsstelle, die eine bestimmte Zertifizierungsstelle eindeutig identifiziert und andere anbieterspezifische Daten. TIS fragt nach Media CAS, um festzustellen, ob ein CAS-Plug-in vorhanden ist, das den CA-Deskriptor verarbeiten kann.

Diagramm zur Feinabstimmung von CAS-Inhalten.

Abbildung 3: CAS-Inhalt abstimmen

Wenn die System-ID der Zertifizierungsstelle unterstützt wird, wird eine Instanz des Media-CAS erstellt und die privaten Anbieterdaten aus dem Zertifizierungsstellendeskriptor werden dem Plug-in bereitgestellt. Dann werden neue Sitzungen in Media CAS geöffnet, um die Audio- und Videoinhalte Streams. Die neu geöffneten Sitzungen erhalten ECMs und EMMs für das Plug-in.

Beispiel für den Ablauf eines CAS-Plug-ins

TIS stellt ECMs mithilfe von Media CAS APIs an das CAS-Plug-in bereit. Ein ECM enthält das verschlüsselte Kontrollwort, das entschlüsselt werden muss mit Informationen von einem EMM. Das CAS-Plug-in bestimmt, wie EMM für das Asset basierend auf anbieterspezifischen Informationen im CA-Deskriptor, der durch die Methode setPrivateData() bereitgestellt wird.

EMMs können im Content-Stream als Band oder Out-of-Band mithilfe eines Netzwerkanfrage vom CA-Plug-in initiiert. TIS verwendet die Methode processEMM() um alle In-Band-EMMs an das CA-Plug-in zu senden.

Wenn für den Erhalt eines EMM eine Netzwerkanfrage erforderlich ist, wird das CA-Plug-in die für die Netzwerktransaktion mit einem Lizenzserver zuständig ist.

Diagramm eines Beispiel-CAS.

Abbildung 4: Beispiel für ein CAS-Plug-in für die Verarbeitung durch EMM und ECM

Wenn der EMM-Anbieter empfangen wird, parst das CA-Plug-in ihn, um zu erhalten, den verschlüsselten Schlüssel zum Entschlüsseln des Kontrollworts. Verschlüsselter EMM-Anbieter Schlüssel und verschlüsseltes Steuerwort können in eine Schlüsselplaner- oder vertrauenswürdige in der das Kontrollwort entschlüsselt wird, des Contentstreams entschlüsselt.

Media CAS-Java-API

Die Media CAS Java API enthält die folgenden Methoden.

  • Alle auf dem Gerät verfügbaren CA-Plug-ins auflisten.

    class MediaCas.PluginDescriptor {
      public String getName();
      public int getSystemId();
    }
    static PluginDescriptor[] enumeratePlugins();
    
  • Erstellt eine Media CAS-Instanz für das angegebene CA-System. Das bedeutet, dass kann das Media CAS-Framework mehrere CAS-Systeme gleichzeitig verarbeiten.

    MediaCas(int CA_system_id);
    MediaCas(@NonNull Context context, int casSystemId,
             @Nullable String tvInputServiceSessionId,
             @PriorityHintUseCaseType int priorityHint);
    
  • Registrieren eines Event-Listeners und ermöglichen der App, einen Handler anzugeben, dessen Looper verwendet wird.

    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);
    
  • Senden Sie die privaten Daten für das Zertifizierungsstellensystem. Die privaten Daten können aus dem CA-Deskriptor, der Tabelle für den bedingten Zugriff oder Out-of-Band-Quellen. Sie ist keiner bestimmten Sitzung zugeordnet.

    void setPrivateData(@NonNull byte[] data);
    
  • Ein EMM-Paket verarbeiten.

    void processEmm(@NonNull byte[] data, int offset, int length);
    
  • Ereignis an ein Zertifizierungsstellensystem senden. Das Format des Ereignisses ist spezifisch für das Schema und undurchsichtig für das Framework.

    void sendEvent(int event, int arg, @Nullable byte[] data);
    
  • Bereitstellungsvorgang des angegebenen Typs für eine Zertifizierungsstelle initiieren System. Wenn sich ein Gerät für einen Pay-TV-Dienst für muss sie zum ersten Mal auf dem CAS-Server bereitgestellt werden. . Geben Sie eine Reihe zugehöriger Parameter für die Bereitstellung des Geräts an.

    void provision(String provisionString);
    
  • Eine Aktualisierung der Berechtigungen auslösen. Wenn ein Nutzer ein Abo für neuer Kanal (z. B. durch die Antwort auf eine Anzeige oder durch Hinzufügen eines Kanals zur elektronischen Programmübersicht (EPG) kann die App CA-Clients anweisen, Berechtigungsschlüssel zu aktualisieren

    void refreshEntitlements(int refreshType);
    
  • Schließen Sie das Media CAS-Objekt.

    void close();
    
  • Öffnen Sie eine Sitzung.

    Session openSession();
    Session openSession(@SessionUsage int sessionUsage, @ScramblingMode int scramblingMode);
    
  • Schließen Sie eine zuvor geöffnete Sitzung.

    void Session#close();
    
  • Geben Sie die privaten Daten der Zertifizierungsstelle aus einem CA-Deskriptor im PMT an. Dieser kann „Programminfo“ oder „ES-Info“ bis zu einer CAS-Sitzung.

    void Session#setPrivateData(@NonNull byte[] sessionId, @NonNull byte[] data);
    
  • Verarbeiten Sie ein ECM-Paket für eine Sitzung.

    void Session#processEcm(@NonNull byte[] data, int offset, int length);
    
  • Sitzungs-ID abrufen

    byte[] Session#getSessionId();
    
  • Ein Sitzungsereignis an ein Zertifizierungsstellensystem senden. Das Format der Das Ereignis ist spezifisch für das Schema und für das Framework intransparent.

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