Framework CAS

Framework Sistem akses bersyarat Media (Media CAS) menyediakan API untuk mengaktifkan layanan akses bersyarat (CA) pada berbagai TV digital hardware, termasuk kabel digital, satelit, sistem terestrial, dan IPTV yang berbeda. Kerangka kerja ini berfungsi dengan Framework Input Android TV dan framework Android TV Tuner, menyediakan API Java yang dipanggil dari aplikasi TV Input Service (TIS).

Tujuan utama Media CAS adalah sebagai berikut.

  • Menyediakan API Java publik dan framework plugin native yang dapat digunakan oleh developer dan OEM pihak ketiga guna mendukung CAS untuk siaran TV di Android.
  • Memberikan framework CAS dalam Android yang memungkinkan OEM ATV memiliki interoperabilitas dengan berbagai vendor CAS secara konsisten.
  • Mendukung beberapa vendor CAS pihak ketiga yang menggunakan plugin native. Plugin CAS dapat menggunakan protokol jaringan khusus vendor, hak format pesan pengelolaan hak (EMM)/pesan kontrol hak (ECM), dan {i>descrambler<i}.
  • Mendukung keamanan hardware seperti tangga kunci.
  • Mendukung Trusted Execution Environment (TEE) seperti TrustZone.

Konfigurasi yang didukung

Konfigurasi Tuner Hardware

Apakah hardware bertanggung jawab untuk demultiplexing aliran transportasi MPEG dan fungsi turun, framework Tuner memberikan data informasi khusus program akses bersyarat (PSI) ke aplikasi TIS untuk berinteraksi dengan TV tuner berbasis hardware.

Data PSI akses bersyarat mencakup deskripsi CA, ECM, dan EMM. Ini memungkinkan plugin CAS memperoleh kunci yang diperlukan untuk mendekripsi streaming konten.

Diagram konfigurasi Tuner hardware.

Gambar 1. Konfigurasi Tuner Hardware

Konfigurasi perangkat keras mungkin memiliki lapisan TEE, seperti TrustZone, yang diilustrasikan pada Gambar 1. Jika tidak ada lapisan TEE, klien CAS plugin ini dapat berkomunikasi dengan layanan tangga kunci hardware yang disediakan oleh terkelola sepenuhnya. Karena variasi antarmuka yang spesifik per vendor, Media CAS tidak menstandarkan mereka.

Konfigurasi perangkat lunak

Sebelum Android 11, framework Media CAS masih dapat digunakan untuk memproses konten berbasis software, seperti IPTV dari IP {i>multicast/unicast<i}. Aplikasi TIS bertanggung jawab untuk membuat instance dan menyediakan objek Java Media CAS.

Aplikasi mungkin menggunakan MediaExtractor atau parser MPEG2-TS lainnya untuk mengekstrak Data PSI terkait CA, seperti deskripsi CA, ECM, dan EMM. Jika aplikasi menggunakan MediaExtractor, kerangka kerja ini dapat mendelegasikan sesi CAS pengelolaan Anda, seperti membuka sesi dan memproses EMM/ECM, ke framework MediaExtractor. MediaExtractor kemudian mengonfigurasi sesi CAS menggunakan API secara langsung.

Jika tidak, aplikasi bertanggung jawab untuk mengekstrak data PSI terkait CA dan mengonfigurasi sesi CAS menggunakan Media CAS Java API (misalnya, saat aplikasi menggunakan parser MPEG2-TS-nya sendiri).

Diagram konfigurasi Tuner.

Gambar 2. Input IPTV, CAS, dan konfigurasi descrambler menggunakan framework MediaExtractor

Dalam skenario ekstraktor perangkat lunak, ekstraktor memerlukan perangkat lunak atau objek {i>descrambler<i} berbasis perangkat keras untuk setiap lintasan acak, terlepas dari apakah track tersebut memanggil decoder aman atau tidak. Hal ini disebabkan oleh berikut ini.

  • Jika trek tidak memerlukan decoding aman, ekstraktor akan mengurai unit akses untuk membersihkan {i>buffer<i} dan mengekstrak sampel seolah-olah dari membersihkan {i>stream<i}. Dengan cara ini MediaCodec tidak perlu terlibat dalam dengan fungsi turun.
  • Jika trek memerlukan decoding aman, ekstraktor mungkin masih memerlukan descrambler. Hal ini terjadi ketika {i>stream <i}transportasi diacak di tingkat paket transportasi, di mana paket SDM header streaming (PES) diacak. Ekstraktor perlu mengakses PES ke informasi tertentu di hilir (misalnya, presentasi stempel waktu).

    {i>Descrambler<i} tidak digunakan oleh ekstraktor jika aliran transpor Diacak di level paket PES, dengan header PES dibiarkan jelas. Akan tetapi, tidak mungkin untuk mengkonfirmasi kapan pengacakan terjadi sampai paket teracak yang sebenarnya tiba. Untuk memudahkan, anggaplah descrambler digunakan jika trek ditentukan untuk diacak berdasarkan pemetaan program tabel (PMT).

Keterbatasan konfigurasi software

Jika trek memerlukan dekode yang aman, descrambler harus berhati-hati saat membiarkan operasi penguraian data menjadi jelas {i>buffer<i} (penyangga). Karena dekode audio yang tidak aman diperlukan, jika decoding video memerlukan aman, sebaiknya diacak pada sesi yang berbeda dengan audio. ECM untuk sesi tersebut harus memberi sinyal ke plugin bahwa decoder tidak diperlukan.

Atau, plugin harus dapat mengikat kunci ke kebijakan keamanannya. Jika tidak, aplikasi dapat dengan mudah memperoleh video frame dengan descrambler audio.

Meskipun sesi memerlukan decoder aman, mungkin diminta untuk menghasilkan output sejumlah kecil data untuk membersihkan buffering oleh ekstraktor untuk memproses header PES. Untuk mencegah aplikasi berbahaya membuat plugin menampilkan seluruh unit akses, plugin perlu mengurai payload transport untuk memastikan payload dimulai dengan header PES dari streaming yang sesuai . Jika tidak, plugin akan menolak permintaan tersebut.

Urutan tuning CA

Ketika melakukan tuning ke saluran baru, modul TIS mendaftar untuk menerima CA deskripsi, ECM, dan EMM dari framework Tuner PSI. Deskripsi CA berisi ID sistem CA, yang secara unik mengidentifikasi CA tertentu vendor dan data khusus vendor lainnya. TIS mengkueri Media CAS untuk menentukan apakah ada plugin CAS yang dapat menangani deskriptor CA.

Diagram penyesuaian konten CAS.

Gambar 3. Menyesuaikan konten CAS

Jika ID sistem CA didukung, instance CAS Media akan dibuat dan data pribadi vendor dari deskriptor CA diberikan ke plugin. Kemudian, sesi baru dibuka di Media CAS untuk menangani audio dan video feed. Sesi yang baru dibuka akan menerima ECM dan EMM untuk plugin.

Contoh alur plugin CAS

TIS mengirimkan ECM ke plugin CAS menggunakan Media CAS API. ECM berisi kata kontrol terenkripsi, yang perlu didekripsi menggunakan informasi dari EMM. Plugin CAS menentukan cara memperoleh EMM untuk aset berdasarkan informasi khusus vendor di Deskripsi CA, yang disediakan oleh metode setPrivateData().

EMM dapat dikirim dalam band di aliran konten atau di luar band menggunakan permintaan jaringan yang dimulai oleh plugin CA. TIS menggunakan metode processEMM() untuk mengirimkan setiap EMM dalam band ke plugin CA.

Jika permintaan jaringan diperlukan untuk mendapatkan EMM, plugin CA bertanggung jawab untuk melakukan transaksi jaringan dengan server lisensi.

Diagram contoh CAS.

Gambar 4. Contoh plugin CAS untuk pemrosesan EMM dan ECM

Saat EMM diterima, plugin CA akan mengurainya untuk mendapatkan kunci terenkripsi untuk membongkar enkripsi kata kontrol. EMM yang dienkripsi dan kata kontrol terenkripsi mungkin dimuat ke tangga kunci atau {i>key ladder<i} untuk melakukan dekripsi kata kontrol dan dari susunan aliran konten.

API Java Media CAS

Media CAS Java API berisi metode berikut.

  • Mencantumkan semua plugin CA yang tersedia di perangkat.

    class MediaCas.PluginDescriptor {
      public String getName();
      public int getSystemId();
    }
    static PluginDescriptor[] enumeratePlugins();
    
  • Membuat instance CAS Media untuk sistem CA yang ditentukan. Hal ini berarti bahwa framework Media CAS dapat menangani banyak sistem CAS secara bersamaan.

    MediaCas(int CA_system_id);
    MediaCas(@NonNull Context context, int casSystemId,
             @Nullable String tvInputServiceSessionId,
             @PriorityHintUseCaseType int priorityHint);
    
  • Mendaftarkan pemroses peristiwa dan mengizinkan aplikasi menentukan pengendali yang looper digunakan.

    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);
    
  • Mengirim data pribadi untuk sistem CA. Data pribadi bisa berupa dari deskriptor CA, tabel akses bersyarat, atau keluar dari sumber pita. Sesi ini tidak terkait dengan sesi tertentu.

    void setPrivateData(@NonNull byte[] data);
    
  • Memproses paket EMM.

    void processEmm(@NonNull byte[] data, int offset, int length);
    
  • Mengirim peristiwa ke sistem CA. Format acaranya adalah khusus untuk skema dan buram untuk kerangka kerja.

    void sendEvent(int event, int arg, @Nullable byte[] data);
    
  • Memulai operasi penyediaan dari jenis yang ditentukan untuk CA sistem file. Saat perangkat mendaftar layanan TV berbayar untuk pertama kali, server perlu mendapatkan penyediaan ke server CAS terlebih dahulu. Memberikan kumpulan parameter terkait ke perangkat untuk penyediaan.

    void provision(String provisionString);
    
  • Memicu pembaruan hak. Saat pengguna berlangganan saluran baru (misalnya, dengan menanggapi iklan atau dengan menambahkan saluran di panduan program elektronik (EPG), aplikasi harus dapat memberi tahu klien CA untuk memperbarui kunci hak.

    void refreshEntitlements(int refreshType);
    
  • Tutup objek Media CAS.

    void close();
    
  • Buka sesi.

    Session openSession();
    Session openSession(@SessionUsage int sessionUsage, @ScramblingMode int scramblingMode);
    
  • Menutup sesi yang dibuka sebelumnya.

    void Session#close();
    
  • Menyediakan data pribadi CA dari deskriptor CA di PMT, yang bisa mulai dari bagian info program atau info ES, ke sesi CAS.

    void Session#setPrivateData(@NonNull byte[] sessionId, @NonNull byte[] data);
    
  • Memproses paket ECM untuk sesi.

    void Session#processEcm(@NonNull byte[] data, int offset, int length);
    
  • Dapatkan ID sesi.

    byte[] Session#getSessionId();
    
  • Mengirim peristiwa sesi ke sistem CA. Format peristiwa itu khusus untuk skema dan buram bagi kerangka kerja.

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