CAS çerçevesi

Medya koşullu erişim sistemleri (Media CAS) çerçevesi, Bir dizi dijital TV'de koşullu erişim (CA) hizmetlerini mümkün kılan API'ler dijital kablo, uydu, karasal sistemler ve IPTV dahil olmak üzere donanım sistemlerdir. Bu çerçeve Android TV Giriş çerçevesi ve Android TV Tuner çerçevesi TV Giriş Hizmeti (TIS) uygulamasından çağrılan Java API'lerini sağlama.

Media CAS'nin ana hedefleri şunlardır.

  • Kullanılabilecek herkese açık bir Java API'si ve yerel eklenti çerçevesi sağlayın .
  • Android'de, ATV OEM'lerin birlikte çalışmasını sağlayan bir CAS çerçevesi sağlama tutarlı bir şekilde ilettiğimiz oluyor.
  • Yerel eklentiler kullanarak birden fazla üçüncü taraf CAS tedarikçisini destekleyin. CAS eklentileri, tedarikçi firmaya özgü ağ protokolleri kullanabilir. yönetim mesajı (EMM)/yararlanma hakkı kontrolü mesajı (ECM) biçimleri, ve şifre çözücüler.
  • Anahtar merdivenleri gibi donanım güvenliğini destekleyin.
  • TrustZone gibi güvenilir yürütme ortamlarını (TEE'ler) destekleyin.

Desteklenen yapılandırmalar

Donanım Tarayıcısı yapılandırması

Donanım, MPEG aktarım akışı çoğullamasından sorumluysa ve şifre çözme, Tuner çerçevesi Google Analytics 4'te sağlanan koşullu erişim programına özgü bilgiler (PSI) TIS uygulamasını kullanarak TV tarayıcısı.

Koşullu erişim PSI verilerine CA tanımlayıcıları, ECM'ler ve EMM'ler dahildir. Bu yapılar, CAS eklentisinin bir cihazın şifresini çözmekte içerik akışları da dahil edilir.

Donanım Tuner yapılandırmasının şeması.

Şekil 1. Donanım Tarayıcısı yapılandırması

Donanım yapılandırmasında TrustZone, Şekil 1'de gösterilmiştir. TEE katmanı yoksa bir CAS istemcisi tarafından sağlanan donanım anahtarı merdiven hizmetleriyle iletişim kurabilir. platformu. Bu arayüzlerin tedarikçi firmaya özgü varyasyonları nedeniyle, Media CAS onları standartlaştırmaz.

Yazılım yapılandırması

Medya CAS çerçevesi Android 11'den önceki sürümlerden IPTV gibi yazılım tabanlı içerikleri işlemek için kullanılmalıdır çoklu yayın/tek yayın. TIS uygulaması, örnek oluşturma ve doğru şekilde uygulama Media CAS Java nesnesinin temel hazırlığını yapma.

Uygulama, verileri ayıklamak için MediaExtractor veya diğer MPEG2-TS ayrıştırıcıları kullanabilir CA tanımlayıcıları, ECM'ler ve EMM'ler gibi CA ile ilgili PSI verileri. Uygulama bir çerçeve oluşturmak istediğinizde, CAS oturumuna (örneğin, bir oturumun açılması ve EMM/ECM'nin işlenmesi gibi) çerçeveye MediaExtractor. Daha sonra MediaExtractor, daha sonra yerel API'yi kullanabilirsiniz.

Aksi takdirde, uygulama CA ile ilgili PSI verilerini ayıklamaktan ve Media CAS Java API'lerini kullanarak CAS oturumunu yapılandırma (örneğin, uygulama kendi MPEG2-TS ayrıştırıcısını kullandığında).

Tarayıcı yapılandırmasının şeması.

Şekil 2. MediaExtractor çerçevesi

Yazılım ayıklayıcı senaryosunda, ayıklayıcı bir yazılım veya her şifreli parça için donanım tabanlı şifre çözücü nesnesi, izleme kodunun güvenli kod çözücüler için çağrı yapıp yapmamasından bağımsız olarak. Bunun nedeni: şunları içerir:

  • Kanal, güvenli kod çözmeyi gerektirmiyorsa ayıklayıcı kodu çözer arabellekleri temizlemek ve sanki bir açık akışı gerçekleştir. Bu sayede MediaCodec, herhangi bir müdahaleye ihtiyaç duymadan şifre çözme.
  • Kanal, güvenli kod çözmeyi gerektiriyorsa ayıklayıcı yine de gerekir. Bu durum, taşıma akışı paketlenmiş temel öğenin aktarım paketi düzeyinde karışık hale getirilmiştir. akış (PES) başlığı karışık. Ayıklayıcının PES'e erişmesi gerekiyor. aşağı akışa aktarmak için bir veya daha büyük .

    Taşıma akışı aşağıdaki koşulları karşılıyorsa şifre çözücü, ayıklayıcı tarafından kullanılmaz. karışık şekilde gösterilir. Ancak, deneme tamamlanana kadar karmaşanın ne zaman gerçekleştiğini doğrulamak mümkün değildir. karmaşık bir paketin mevcut olduğunu gösterir. Kolaylık sağlaması için bir şifre çözücünün kullanıldığını varsayalım program haritasına göre parkurun karıştırıldığı belirlenirse tablosunda (PMT) olması gerekir.

Yazılım yapılandırmasıyla ilgili sınırlamalar

Kanal güvenli kod çözmeyi gerektirdiğinde, şifre çözücüyü açmak için karmaşık bir işlemi çözerken dikkatli olunması gerekir. tamponları kullanır. Güvenli olmayan ses kodu çözme işlemi gerekli olduğundan, video kodu çözme işlemi şifre çözücüler, sesten farklı bir oturumda karıştırılmalıdır. Oturumun ECM'si, eklentiye güvenli bir kod çözücünün olduğunu bildirmelidir. gereklidir.

Alternatif olarak, eklentinin bir kilit noktasıdır. Aksi takdirde uygulama, videoyu kolayca alabilir. kare ve ses şifre çözücüyü devreye sokmak.

Oturum için güvenli bir kod çözücü gerekli olsa bile Ayıklayıcı tarafından arabellekleri temizlemek için az miktarda veri çıktısı istendi aşağıdaki adımları uygulayın. Kötü amaçlı bir uygulamanın eklenti yapmasını engellemek için tüm erişim birimini döndürürse eklentinin taşıma yükünü ayrıştırması gerekir. Yükün uygun yayının PES başlığıyla başladığından emin olun. türü. Aksi takdirde, eklenti isteği reddetmelidir.

CA ayarlama sırası

TIS modülü yeni bir kanala ince ayar yaparken sertifika almak için tanımlayıcılar, ECM'ler ve EMM'ler oluşturur. CA tanımlayıcısı belirli bir CA'yı benzersiz şekilde tanımlayan CA sistem kimliğini içerir tedarikçiye ve tedarikçiye özgü diğer verilere yer kaplar. TIS, Media CAS'yi kullanarak CA tanımlayıcısını işleyebilecek bir CAS eklentisi olup olmadığını kontrol eder.

CAS içeriklerini ayarlama şeması.

Şekil 3. CAS içeriklerini ayarlama

CA sistem kimliği destekleniyorsa Media CAS'nin bir örneği oluşturulur ve CA tanımlayıcısından alınan tedarikçi özel verileri eklentiye sağlanır. Ardından, ses ve videonun işlenmesi için Media CAS'de yeni oturumlar açılır. akışlar. Yeni açılan oturumlar, eklenti için ECM'leri ve EMM'leri alır.

Örnek CAS eklentisi akışı

TIS, ECM'leri Media CAS API'lerini kullanarak CAS eklentisine gönderir. ECM şifresinin çözülmesi gereken şifrelenmiş denetim kelimesini içerir veya EMM'deki bilgileri kullanır. CAS eklentisi, tedarikçi firmaya özgü bilgilere dayalı olarak öğe için bir EMM setPrivateData() yöntemi tarafından sağlanan CA tanımlayıcısı.

EMM'ler, içerik akışında bant içinde veya CA eklentisi tarafından başlatılan ağ isteği. TIS, processEMM() yöntemini kullanır Bant içi EMM'leri CA eklentisine teslim etmek.

EMM almak için ağ isteği gerekiyorsa CA eklentisi lisans sunucusuyla ağ işlemini gerçekleştirmekten sorumludur.

Örnek CAS şeması.

4.Şekil EMM ve ECM işleme için örnek CAS eklentisi

EMM alındığında, CA eklentisi bu SDK'yı şifreli anahtarın şifresini çözer. Şifrelenmiş EMM Anahtar ve şifrelenmiş denetim kelimesi bir anahtar sıralamasına yüklenmiş veya kelime şifresinin çözüldüğünü ve bunun ardından içerik akışının şifrelenmesine yol açabilir.

Medya CAS Java API'sı

Media CAS Java API'si aşağıdaki yöntemleri içerir.

  • Cihazdaki kullanılabilir tüm CA eklentilerini listeleyin.

    class MediaCas.PluginDescriptor {
      public String getName();
      public int getSystemId();
    }
    static PluginDescriptor[] enumeratePlugins();
    
  • Belirtilen CA sistemi için bir Media CAS örneği oluşturun. Bunun anlamı, medya CAS çerçevesinin birden çok CAS sistemini aynı anda işleyebilmesidir.

    MediaCas(int CA_system_id);
    MediaCas(@NonNull Context context, int casSystemId,
             @Nullable String tvInputServiceSessionId,
             @PriorityHintUseCaseType int priorityHint);
    
  • Bir etkinlik işleyici kaydedin ve uygulamanın döngü örneğidir.

    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);
    
  • CA sistemi için gizli verileri gönderin. Gizli veriler, CA tanımlayıcısından, koşullu erişim tablosundan veya bant kaynağı yok. Bu bilgi belirli bir oturumla ilişkilendirilmez.

    void setPrivateData(@NonNull byte[] data);
    
  • EMM paketini işleyin.

    void processEmm(@NonNull byte[] data, int offset, int length);
    
  • CA sistemine etkinlik gönderir. Etkinliğin formatı: ve çerçeveye opak bir görünüm sağlar.

    void sendEvent(int event, int arg, @Nullable byte[] data);
    
  • Bir CA için belirtilen türde bir temel hazırlık işlemi başlatın bahsedeceğim. Bir cihaz bir ücretli TV hizmetine kaydolduğunda CAS sunucusuna gönderilmesinin gerektiği. tıklayın. Temel hazırlık için cihaza bir dizi ilgili parametre sağlayın.

    void provision(String provisionString);
    
  • Yararlanma hakları yenilenmesini tetikleyin. Bir kullanıcı bir (örneğin, bir reklama yanıt vererek) veya elektronik program rehberine (EPG) bir kanal ekleyerek, uygulamanın CA istemcilerine yararlanma hakkı anahtarlarını yenilemelerini söyleyebilmelisiniz.

    void refreshEntitlements(int refreshType);
    
  • Medya CAS nesnesini kapatın.

    void close();
    
  • Bir oturum açın.

    Session openSession();
    Session openSession(@SessionUsage int sessionUsage, @ScramblingMode int scramblingMode);
    
  • Önceden açılmış bir oturumu kapatın.

    void Session#close();
    
  • PMT'deki bir CA tanımlayıcısından CA gizli verilerini sağlayın. Bu veriler, veya sertifika programı bilgisi bölümünden CAS oturumuna

    void Session#setPrivateData(@NonNull byte[] sessionId, @NonNull byte[] data);
    
  • Bir oturum için ECM paketini işleyin.

    void Session#processEcm(@NonNull byte[] data, int offset, int length);
    
  • Oturum kimliğini al.

    byte[] Session#getSessionId();
    
  • CA sistemine oturum etkinliği gönderir. Biçim Etkinlik şemaya özgüdür ve çerçeve için opaktır.

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