CAS 架構

媒體條件式存取系統 (媒體 CAS) 架構提供了 可在各種數位電視上啟用條件式存取 (CA) 服務的 API 硬體,包括數位有線電視、衛星電視、地面系統和 IPTV 有些人會將 Cloud Storage 視為檔案系統 但實際上不是這個架構會與 Android TV 輸入架構 以及 Android TV Tuner 架構 提供從電視輸入服務 (TIS) 應用程式叫用的 Java API。

媒體 CAS 的主要目標如下:

  • 提供可供使用的公開 Java API 和原生外掛程式架構 ,協助第三方開發人員和原始設備製造商 (OEM) 在 Android 平台上支援 CAS。
  • 在 Android 中提供 CAS 架構,讓 ATV 原始設備製造商 (OEM) 互通操作 與各家 CAS 廠商一致
  • 使用原生外掛程式支援多個第三方 CAS 廠商。 CAS 外掛程式可能會使用供應商專屬的網路通訊協定,授權 管理訊息 (EMM)/授權控制訊息 (ECM) 格式, 以及解碼器的內容
  • 支援硬體安全性,例如鑰匙梯。
  • 支援 TrustZone 等受信任的執行環境 (TEE)。

支援的設定

硬體調諧器設定

如果硬體負責執行 MPEG 傳輸串流去多工處理 Tuner 架構 提供條件式存取計畫專屬資訊 (PSI) 資料給 TIS 應用程式以便與硬體式電視調諧器互動。

條件式存取 PSI 資料包括 CA 描述元、ECM 和 EMM。這些 結構可讓 CAS 外掛程式取得解密 內容串流。

硬體調諧器設定圖表。

圖 1. 硬體調諧器設定

硬體設定可能包含 TEE 層,例如 TrustZone 如圖 1 所示如果沒有 TEE 層,則為 CAS 用戶端 外掛程式能與 平台。由於這些介面因供應商而異,媒體 CAS 就不會標準化

軟體設定

在 Android 11 之前,媒體 CAS 架構 ( 處理軟體內容,例如來自 IP 位址的 IPTV 多點傳播/單點傳播。TIS 應用程式負責在執行例項時正確執行例項化作業 佈建 Media CAS Java 物件。

應用程式可能會使用 MediaExtractor 或其他 MPEG2-TS 剖析器來擷取 與 CA 相關的 PSI 資料,例如 CA 描述元、ECM 和 EMM。如果應用程式使用 架構 MediaExtractor 可以委派 CAS 工作階段 像是開啟工作階段及處理 EMM/ECM MediaExtractor。接著,MediaExtractor 會透過原生指令列設定 CAS 工作階段 API。

否則,應用程式會負責擷取 CA 相關的 PSI 資料,並 使用 Media CAS Java API 設定 CAS 工作階段 (例如應用程式使用專屬的 MPEG2-TS 剖析器時)。

調諧器設定圖表。

圖 2. IPTV 輸入、CAS 和 descrambler 設定 架構 MediaExtractor

在軟體擷取器的情況下,擷取器需要有軟體或 硬體式解碼器物件 與追蹤呼叫是否適用於安全解碼器這是因為 以下內容。

  • 如果音軌不需要透過安全解碼,擷取器將進行解碼 用來清除緩衝區並擷取範例的存取單位,就像從 清除串流。如此一來,MediaCodec就無須參與 去打散。
  • 如果音軌需要安全解碼,擷取器可能仍然 需要解碼器這會在傳輸串流 以傳輸封包層級打散,完成封包化基礎 串流 (PES) 標頭已鎖碼處理。擷取器必須存取 PES 。 timestamp)。

    如果傳輸串流符合以下條件,則擷取器不會使用解碼器 以 PES 封包層級打散,但 PES 標頭清晰可見。 不過,在 實際抵達時間為簡單起見,假設使用解碼器 是否根據計畫對應方式判定軌道經過拌碼處理 資料表 (PMT) 資料表。

軟體設定限制

如需使用安全解碼功能播放曲目,就必須使用解碼器 必須謹慎進行去蕪存菁 緩衝區。因為需要使用不安全的音訊解碼功能,因此如果需要將影片解碼 安全解碼器,應該在與音訊不同的工作階段上打散。 工作階段的 ECM 必須將安全解碼器傳送給外掛程式 必填。

或者,外掛程式必須能夠穩定地將 新增至安全性政策。否則,應用程式可輕鬆取得影片 產生音訊片段

即使工作階段需要使用安全解碼器,也可能是 模型會輸出少量資料,以便擷取器清除緩衝區 處理 PES 標頭防止惡意應用程式產生外掛程式 會傳回整個存取單元,外掛程式必須剖析傳輸酬載 確保酬載從適當串流的 PES 標頭開始 類型。否則,外掛程式應拒絕要求。

CA 調整序列

調整至新管道時,TIS 模組會註冊以接收 CA 描述元、ECM 和 EMM。CA 描述元 包含專門識別特定 CA 的 CA 系統 ID 供應商和其他供應商特定資料目標曝光比重查詢 媒體 CAS 判斷是否有可處理 CA 描述元的 CAS 外掛程式。

調整 CAS 內容的圖表。

圖 3. 調整 CAS 內容

如果支援 CA 系統 ID,就會建立媒體 CAS 的執行個體 ,並將 CA 描述元中的廠商私人資料提供給外掛程式。 接著,系統會在媒體 CAS 中開啟新的工作階段,以處理音訊和視訊 串流。新開啟的工作階段會收到外掛程式的 ECM 和 EMM。

CAS 外掛程式流程範例

TIS 使用 Media CAS API 將 ECM 傳送至 CAS 外掛程式。企業社群管理 (ECM) 包含加密控製字詞,因此需要解密 有效運用 EMM 中的資訊CAS 外掛程式會判斷取得方式 產生資產的 EMM (根據 由 setPrivateData() 方法提供的 CA 描述元。

EMM 可能會使用內容串流的頻帶提交,也可能會使用 由 CA 外掛程式發起的網路要求。TIS 使用 processEMM() 方法 ,將任何頻帶 EMM 傳送到 CA 外掛程式。

如果需要網路要求才能取得 EMM,CA 外掛程式會 負責使用授權伺服器執行網路交易。

範例 CAS。

圖 4. EMM 和 ECM 處理作業的 CAS 外掛程式範例

收到 EMM 時,CA 外掛程式會進行剖析來取得 以解密控製字詞經過加密的 EMM 金鑰和加密控製字詞可能會載入到索引鍵梯子或可信任 執行控製字詞解密及後續 內容串流的解碼。

媒體 CAS Java API

Media CAS Java API 包含下列方法。

  • 列出裝置上所有可用的 CA 外掛程式。

    class MediaCas.PluginDescriptor {
      public String getName();
      public int getSystemId();
    }
    static PluginDescriptor[] enumeratePlugins();
    
  • 為指定的 CA 系統建構媒體 CAS 執行個體。也就是說 媒體 CAS 架構可同時處理多個 CAS 系統。

    MediaCas(int CA_system_id);
    MediaCas(@NonNull Context context, int casSystemId,
             @Nullable String tvInputServiceSessionId,
             @PriorityHintUseCaseType int priorityHint);
    
  • 註冊事件監聽器,並允許應用程式指定其處理常式 迴圈

    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 系統的私人資料。私人資料可能會 、條件式存取資料表或 。但不會與特定工作階段建立關聯。

    void setPrivateData(@NonNull byte[] data);
    
  • 處理 EMM 封包。

    void processEmm(@NonNull byte[] data, int offset, int length);
    
  • 將事件傳送至 CA 系統。事件格式為 專屬於該架構,且無法解讀。

    void sendEvent(int event, int arg, @Nullable byte[] data);
    
  • 啟動指定類型的 CA 佈建作業 有些人會將 Cloud Storage 視為檔案系統 但實際上不是裝置註冊付費電視服務時 因為在初次佈建至 CAS 伺服器時 首先。為裝置提供一組相關參數以進行佈建。

    void provision(String provisionString);
    
  • 觸發授權重新整理作業。使用者訂閱 新管道 (例如回應廣告 或根據電子節目指南 (EPG) 新增頻道,應用程式應該 ,您可以指示 CA 用戶端重新整理授權金鑰。

    void refreshEntitlements(int refreshType);
    
  • 關閉媒體 CAS 物件。

    void close();
    
  • 開啟工作階段。

    Session openSession();
    Session openSession(@SessionUsage int sessionUsage, @ScramblingMode int scramblingMode);
    
  • 關閉先前開啟的工作階段。

    void Session#close();
    
  • 在 PMT 中提供 CA 描述元中的 CA 私人資料,可以是 加入 CAS 工作階段

    void Session#setPrivateData(@NonNull byte[] sessionId, @NonNull byte[] data);
    
  • 處理工作階段的 ECM 封包。

    void Session#processEcm(@NonNull byte[] data, int offset, int length);
    
  • 取得工作階段 ID。

    byte[] Session#getSessionId();
    
  • 將工作階段事件傳送至 CA 系統。 活動專屬於該配置,對架構而言不透明。

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