khung CAS

Khung Hệ thống truy cập có điều kiện cho nội dung đa phương tiện (CAS) cung cấp các tiêu chuẩn API để bật dịch vụ truy cập có điều kiện (CA) trên nhiều loại TV kỹ thuật số phần cứng, bao gồm cáp kỹ thuật số, vệ tinh, hệ thống mặt đất và IPTV hệ thống. Khung này hoạt động với Khung đầu vào của Android TVkhung Android TV Tuner, cung cấp các API Java được gọi từ ứng dụng Dịch vụ đầu vào TV (TIS).

Sau đây là các mục tiêu chính của CAS truyền thông.

  • Cung cấp API Java công khai và khung trình bổ trợ gốc có thể sử dụng được của các nhà phát triển bên thứ ba và OEM (Nhà sản xuất thiết bị gốc) để hỗ trợ CAS cho truyền hình phát sóng trong Android.
  • Cung cấp khung CAS trong Android để cho phép OEM của ATV tương tác với nhiều nhà cung cấp CAS theo cách nhất quán.
  • Hỗ trợ nhiều nhà cung cấp CAS bên thứ ba bằng cách sử dụng các trình bổ trợ gốc. Các trình bổ trợ CAS có thể dùng giao thức mạng dành riêng cho nhà cung cấp, quyền định dạng thông báo quản lý (EMM)/thông báo kiểm soát quyền (ECM), và giải xáo trộn.
  • Hỗ trợ bảo mật phần cứng, chẳng hạn như thang chìa khoá.
  • Hỗ trợ các môi trường thực thi (TEE) đáng tin cậy như TrustZone.

Cấu hình được hỗ trợ

Cấu hình bộ dò phần cứng

Nếu phần cứng chịu trách nhiệm tách kênh truyền tải MPEG và mô tả ngắn gọn, khung điều chỉnh cung cấp dữ liệu thông tin cụ thể theo chương trình truy cập có điều kiện (PSI) cho Ứng dụng TIS để giao tiếp với bộ điều chỉnh TV dựa trên phần cứng.

Dữ liệu PSI truy cập có điều kiện bao gồm mã mô tả CA, ECM và EMM. Các cấu trúc này cho phép trình bổ trợ CAS lấy các khoá cần thiết để giải mã luồng nội dung.

Sơ đồ cấu hình Bộ dò phần cứng.

Hình 1. Cấu hình bộ dò phần cứng

Cấu hình phần cứng có thể có lớp TEE, chẳng hạn như TrustZone, được minh hoạ trong Hình 1. Nếu không có lớp TEE, thì ứng dụng CAS trình bổ trợ có thể giao tiếp với các dịch vụ thang khoá phần cứng do chủ. Do các biến thể của các giao diện này theo nhà cung cấp cụ thể, Media CAS sẽ không chuẩn hoá chúng.

Cấu hình phần mềm

Trước Android 11, khung CAS của nội dung đa phương tiện vẫn có thể được dùng để xử lý nội dung dựa trên phần mềm, chẳng hạn như IPTV từ IP truyền đa hướng/đơn hướng. Ứng dụng TIS chịu trách nhiệm tạo thực thể và đảm bảo đúng cách cấp phép đối tượng Java CAS của nội dung đa phương tiện.

Ứng dụng có thể sử dụng MediaExtractor hoặc các trình phân tích cú pháp MPEG2-TS khác để trích xuất Dữ liệu PSI liên quan đến CA, chẳng hạn như mã mô tả CA, ECM và EMM. Nếu ứng dụng sử dụng khung MediaExtractor, có thể uỷ quyền phiên CAS quản lý, chẳng hạn như mở một phiên và xử lý EMM/ECM cho khung Trình trích xuất nội dung. Sau đó, MediaExtractor định cấu hình phiên CAS bằng cách sử dụng phiên bản gốc API.

Nếu không, ứng dụng đó sẽ chịu trách nhiệm trích xuất dữ liệu PSI liên quan đến CA và định cấu hình phiên CAS bằng API Java CAS của Media (ví dụ: khi ứng dụng sử dụng trình phân tích cú pháp MPEG2-TS riêng).

Sơ đồ cấu hình Bộ dò.

Hình 2. Đầu vào IPTV, CAS và cấu hình giải mã bằng cách sử dụng khung MediaExtractor

Trong trường hợp trình trích xuất phần mềm, trình trích xuất cần có một phần mềm hoặc đối tượng giải mã dựa trên phần cứng cho mỗi bản nhạc bị xáo trộn, bất kể đường đi có gọi bộ giải mã bảo mật hay không. Điều này là do sau đây.

  • Nếu kênh không yêu cầu giải mã an toàn, trình trích xuất sẽ giải mã đơn vị truy cập để xoá vùng đệm và trích xuất mẫu như thể từ một xóa luồng. Bằng cách này, MediaCodec không cần tham gia vào mô tả.
  • Nếu kênh yêu cầu giải mã an toàn, thì trình trích xuất có thể vẫn cần một bộ giải mã. Điều này xảy ra khi luồng truyền tải bị xáo trộn ở cấp gói vận chuyển, trong đó gói sơ cấp được đóng gói tiêu đề luồng (PES) bị xáo trộn. Công cụ trích xuất cần truy cập vào PES tiêu đề sang hạ nguồn một số thông tin nhất định (ví dụ: bản trình bày dấu thời gian).

    Trình giải mã không được sử dụng bởi trình trích xuất nếu luồng truyền tải bị xáo trộn ở cấp gói PES, trong đó tiêu đề PES bị để trống. Tuy nhiên, không thể xác nhận khi nào xảy ra xáo trộn cho đến khi gói bị xáo trộn thực sự xuất hiện. Để cho đơn giản, giả sử dùng bộ giải mã nếu bản nhạc được xác định là bị xáo trộn dựa trên liên kết chương trình (PMT).

Các hạn chế của cấu hình phần mềm

Khi bản nhạc yêu cầu giải mã an toàn, bộ giải mã cần phải được thận trọng khi để thao tác giải mã thành rõ ràng vùng đệm. Vì phương pháp giải mã âm thanh không an toàn là bắt buộc, nếu phương thức giải mã video yêu cầu bộ giải mã bảo mật, thì mã này nên được xáo trộn trong một phiên khác với âm thanh. ECM cho phiên này phải báo hiệu cho trình bổ trợ biết rằng bộ giải mã bảo mật là trường bắt buộc.

Ngoài ra, trình bổ trợ phải có khả năng liên kết vào chính sách bảo mật. Nếu không, ứng dụng có thể dễ dàng tải video khung hình bằng bộ giải mã âm thanh.

Ngay cả khi phiên này yêu cầu bộ giải mã bảo mật, được yêu cầu xuất một lượng nhỏ dữ liệu để xoá bộ đệm bằng công cụ trích xuất để xử lý tiêu đề PES. Để ngăn một ứng dụng độc hại tạo trình bổ trợ trả về toàn bộ đơn vị truy cập, trình bổ trợ cần phân tích cú pháp tải trọng truyền tải để đảm bảo rằng tải trọng bắt đầu bằng tiêu đề PES của luồng phù hợp loại. Nếu không, trình bổ trợ sẽ từ chối yêu cầu.

Trình tự điều chỉnh CA

Khi dò vào một kênh mới, mô-đun TIS đăng ký nhận CA mã mô tả, ECM và EMMs từ khung PSI Tuner. Mã mô tả CA chứa ID hệ thống CA, xác định duy nhất một CA cụ thể nhà cung cấp và dữ liệu cụ thể khác theo nhà cung cấp. TIS truy vấn CAS nội dung đa phương tiện để xác định xem có tồn tại một trình bổ trợ CAS có thể xử lý chỉ số mô tả CA hay không.

Sơ đồ điều chỉnh nội dung CAS.

Hình 3. Điều chỉnh nội dung CAS

Nếu mã hệ thống CA được hỗ trợ, thì một bản sao của CAS nội dung đa phương tiện sẽ được tạo và dữ liệu riêng tư của nhà cung cấp từ chỉ số mô tả CA sẽ được cung cấp cho trình bổ trợ. Sau đó, các phiên mới sẽ được mở trong Media CAS để xử lý âm thanh và video phát trực tuyến. Các phiên mới mở sẽ nhận được ECM và EMM cho trình bổ trợ.

Quy trình trình bổ trợ CAS mẫu

TIS phân phối ECM cho trình bổ trợ CAS bằng cách sử dụng Media CAS API. ECM chứa từ điều khiển đã mã hoá cần được giải mã bằng cách sử dụng thông tin của EMM. Trình bổ trợ CAS xác định cách lấy EMM cho nội dung dựa trên thông tin cụ thể về nhà cung cấp trong Chỉ số mô tả CA, được cung cấp bằng phương thức setPrivateData().

EMM có thể được phân phối theo dải trong luồng nội dung hoặc bên ngoài dải bằng cách sử dụng yêu cầu mạng do trình bổ trợ CA khởi tạo. TIS sử dụng phương thức processEMM() để phân phối dịch vụ EMM (quản lý thiết bị di động doanh nghiệp) trong nhóm cho trình bổ trợ CA.

Nếu cần có yêu cầu mạng để có được EMM, trình bổ trợ CA sẽ chịu trách nhiệm thực hiện giao dịch mạng với máy chủ cấp phép.

Sơ đồ về một CAS mẫu.

Hình 4. Ví dụ về trình bổ trợ CAS cho quá trình xử lý EMM và ECM

Khi nhận được EMM, trình bổ trợ CA sẽ phân tích cú pháp trình bổ trợ này để lấy khoá đã mã hoá để giải mã từ điều khiển. EMM (quản lý thiết bị di động doanh nghiệp) đã mã hoá khoá và từ điều khiển đã mã hoá có thể được tải vào một thang khoá hoặc thực hiện quá trình giải mã từ kiểm soát và mô tả luồng nội dung.

API Java CAS truyền thông

Media CAS Java API chứa các phương thức sau.

  • Liệt kê tất cả các trình bổ trợ CA có sẵn trên thiết bị.

    class MediaCas.PluginDescriptor {
      public String getName();
      public int getSystemId();
    }
    static PluginDescriptor[] enumeratePlugins();
    
  • Tạo một thực thể CAS của nội dung đa phương tiện cho hệ thống CA đã chỉ định. Điều này có nghĩa là khung CAS truyền thông có thể xử lý nhiều hệ thống CAS cùng lúc.

    MediaCas(int CA_system_id);
    MediaCas(@NonNull Context context, int casSystemId,
             @Nullable String tvInputServiceSessionId,
             @PriorityHintUseCaseType int priorityHint);
    
  • Đăng ký một trình nghe sự kiện và cho phép ứng dụng chỉ định một trình xử lý có vòng lặp sẽ được sử dụng.

    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);
    
  • Gửi dữ liệu riêng tư cho hệ thống CA. Dữ liệu riêng tư có thể xuất hiện từ chỉ số mô tả CA, bảng truy cập có điều kiện, hoặc nguồn ngoài dải. Sự kiện này không liên quan đến một phiên cụ thể.

    void setPrivateData(@NonNull byte[] data);
    
  • Xử lý gói EMM.

    void processEmm(@NonNull byte[] data, int offset, int length);
    
  • Gửi một sự kiện đến hệ thống CA. Định dạng của sự kiện là dành riêng cho giao thức và không rõ ràng cho khung.

    void sendEvent(int event, int arg, @Nullable byte[] data);
    
  • Bắt đầu thao tác cấp phép thuộc loại đã chỉ định cho CA hệ thống. Khi một thiết bị đăng ký dịch vụ truyền hình có trả phí cho lần đầu tiên thì cần được cấp phép cho máy chủ CAS đầu tiên. Cung cấp một tập hợp các tham số liên quan đến thiết bị để cấp phép.

    void provision(String provisionString);
    
  • Kích hoạt làm mới các quyền. Khi người dùng đăng ký một kênh mới (ví dụ: bằng cách phản hồi một quảng cáo hoặc bằng cách thêm một kênh trong hướng dẫn chương trình điện tử (EPG), ứng dụng phải có thể yêu cầu ứng dụng CA làm mới khoá quyền.

    void refreshEntitlements(int refreshType);
    
  • Đóng đối tượng CAS nội dung đa phương tiện.

    void close();
    
  • Mở một phiên.

    Session openSession();
    Session openSession(@SessionUsage int sessionUsage, @ScramblingMode int scramblingMode);
    
  • Đóng phiên đã mở trước đó.

    void Session#close();
    
  • Cung cấp dữ liệu riêng tư của CA từ một phần mô tả CA trong PMT. Dữ liệu này có thể là từ phần thông tin chương trình hoặc thông tin tiếng Tây Ban Nha sang một phiên CAS.

    void Session#setPrivateData(@NonNull byte[] sessionId, @NonNull byte[] data);
    
  • Xử lý gói ECM cho một phiên.

    void Session#processEcm(@NonNull byte[] data, int offset, int length);
    
  • Lấy mã phiên.

    byte[] Session#getSessionId();
    
  • Gửi một sự kiện trong phiên đến hệ thống CA. Định dạng của sự kiện đó dành riêng cho lược đồ và không rõ ràng đối với khung.

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