إطار عمل كاس

يوفر إطار أنظمة الوصول المشروط للوسائط (Media CAS) واجهات برمجة التطبيقات القياسية لتمكين خدمات الوصول المشروط (CA) على مجموعة من أجهزة التلفزيون الرقمي، بما في ذلك الكابلات الرقمية والأقمار الصناعية والأنظمة الأرضية وأنظمة IPTV. يعمل الإطار مع إطار عمل Android TV Input وإطار عمل Android TV Tuner ، مما يوفر واجهات برمجة تطبيقات Java التي يتم استدعاؤها من تطبيق خدمة إدخال التلفزيون (TIS).

الأهداف الرئيسية لـ Media CAS هي كما يلي.

  • توفير واجهة برمجة تطبيقات Java عامة وإطار عمل مكون إضافي أصلي يمكن استخدامه بواسطة مطوري الطرف الثالث ومصنعي المعدات الأصلية لدعم CAS للبث التلفزيوني في Android.
  • توفير إطار عمل CAS داخل نظام Android يسمح لمصنعي ATV OEM بالتفاعل مع مجموعة متنوعة من موردي CAS بطريقة متسقة.
  • دعم العديد من موردي CAS التابعين لجهات خارجية باستخدام المكونات الإضافية الأصلية. قد تستخدم المكونات الإضافية لـ CAS بروتوكولات الشبكة الخاصة بالبائع، وتنسيقات رسائل إدارة الاستحقاق (EMM)/رسائل التحكم في الاستحقاق (ECM)، وأجهزة إزالة التشفير.
  • دعم أمان الأجهزة مثل سلالم المفاتيح.
  • دعم بيئات التنفيذ الموثوقة (TEEs) مثل TrustZone.

التكوينات المدعومة

تكوين موالف الأجهزة

إذا كان الجهاز مسؤولاً عن إزالة تعدد إرسال دفق نقل MPEG وإلغاء تشفيره، فإن إطار عمل Tuner يوفر بيانات معلومات خاصة بالبرنامج (PSI) للوصول المشروط إلى تطبيق TIS من أجل التفاعل مع موالفات التلفزيون القائمة على الأجهزة.

تتضمن بيانات PSI للوصول المشروط واصفات CA ووحدات ECM وEMMs. تمكن هذه الهياكل البرنامج المساعد CAS من الحصول على المفاتيح اللازمة لفك تشفير تدفقات المحتوى.

رسم تخطيطي لتكوين موالف الأجهزة.

الشكل 1. تكوين موالف الأجهزة

قد يحتوي تكوين الأجهزة على طبقة TEE، مثل TrustZone، الموضح في الشكل 1. إذا لم تكن هناك طبقة TEE، فيمكن للمكون الإضافي لعميل CAS الاتصال بخدمات سلم مفاتيح الأجهزة التي يوفرها النظام الأساسي. نظرًا للاختلافات الخاصة بالبائعين لهذه الواجهات، فإن Media CAS لا تقوم بتوحيدها.

تكوين البرمجيات

قبل Android 11، كان لا يزال من الممكن استخدام إطار عمل Media CAS لمعالجة المحتوى القائم على البرامج، مثل IPTV من البث المتعدد/البث الأحادي IP. يعد تطبيق TIS مسؤولاً عن إنشاء كائن Media CAS Java وتوفيره بشكل صحيح.

قد يستخدم التطبيق MediaExtractor أو موزعي MPEG2-TS الآخرين لاستخراج بيانات PSI ذات الصلة بـ CA، مثل واصفات CA وECMs وEMMs. إذا كان التطبيق يستخدم إطار العمل MediaExtractor، فيمكنه تفويض إدارة جلسة CAS، مثل فتح جلسة ومعالجة EMM/ECM، إلى إطار العمل MediaExtractor. يقوم MediaExtractor بعد ذلك بتكوين جلسة CAS باستخدام واجهة برمجة التطبيقات الأصلية مباشرةً.

بخلاف ذلك، يكون التطبيق مسؤولاً عن استخراج بيانات PSI ذات الصلة بـ CA وتكوين جلسة CAS باستخدام Media CAS Java APIs (على سبيل المثال، عندما يستخدم التطبيق محلل MPEG2-TS الخاص به).

رسم تخطيطي لتكوين الموالف.

الشكل 2. تكوين إدخال IPTV وCAS ومزيل التشفير باستخدام إطار عمل MediaExtractor

في سيناريو مستخرج البرامج، يتطلب المستخرج كائن فك تشفير قائم على برنامج أو جهاز لكل مسار مشوش، بغض النظر عما إذا كان المسار يستدعي وحدات فك ترميز آمنة. ويرجع ذلك إلى ما يلي.

  • إذا كان المسار لا يتطلب فك تشفير آمن، يقوم المستخرج بتفكيك وحدة الوصول لمسح المخازن المؤقتة واستخراج العينات كما لو كان من تدفق واضح. بهذه الطريقة لا يحتاج MediaCodec إلى المشاركة في عملية إلغاء التشفير.
  • إذا كان المسار يتطلب فك تشفير آمن، فقد لا يزال المستخرج بحاجة إلى أداة إلغاء التشفير. يحدث هذا عندما يتم تشفير تدفق النقل على مستوى حزمة النقل، حيث يتم تشفير رأس التدفق الأولي المعبأ (PES). يحتاج المستخرج إلى الوصول إلى رأس PES للحصول على معلومات معينة (على سبيل المثال، الطابع الزمني للعرض التقديمي).

    لا يتم استخدام أداة إزالة التشفير بواسطة المستخرج إذا تم تشفير تدفق النقل على مستوى حزمة PES، حيث يتم ترك رأس PES خاليًا. ومع ذلك، لا يمكن التأكد من وقت حدوث التخليط حتى وصول الحزمة المشوشة الفعلية. من أجل التبسيط، افترض أنه تم استخدام مزيل التشفير إذا تم تحديد المسار ليتم تخليطه بناءً على جدول تعيين البرنامج (PMT).

قيود تكوين البرمجيات

عندما يتطلب المسار فك تشفير آمن، يجب على أداة إلغاء التشفير أن تكون حذرة عند ترك عملية إلغاء التشفير في مخازن مؤقتة خالية. نظرًا لأن فك تشفير الصوت غير الآمن مطلوب، إذا كان فك تشفير الفيديو يتطلب أجهزة فك تشفير آمنة، فيجب تشفيره في جلسة مختلفة عن الصوت. يجب أن يرسل ECM للجلسة إشارة إلى البرنامج المساعد بأن هناك حاجة إلى وحدة فك ترميز آمنة.

وبدلاً من ذلك، يجب أن يكون البرنامج الإضافي قادرًا على ربط المفتاح بشكل موثوق بسياسة الأمان الخاصة به. بخلاف ذلك، يمكن للتطبيق بسهولة الحصول على إطارات الفيديو باستخدام أداة إلغاء تشفير الصوت.

حتى عندما تتطلب الجلسة وحدة فك ترميز آمنة، قد يُطلب منها إخراج كمية صغيرة من البيانات لمسح المخازن المؤقتة بواسطة المستخرج لمعالجة رأس PES. لمنع تطبيق ضار من جعل المكون الإضافي يعيد وحدة الوصول بأكملها، يحتاج المكون الإضافي إلى تحليل حمولة النقل للتأكد من أن الحمولة تبدأ برأس PES من نوع الدفق المناسب. وإلا، يجب أن يرفض البرنامج المساعد الطلب.

تسلسل ضبط CA

عند الضبط على قناة جديدة، تسجل وحدة TIS لتلقي واصفات CA ووحدات ECM وEMMs من إطار عمل PSI Tuner. يحتوي واصف CA على معرف نظام CA، الذي يعرّف بشكل فريد بائع CA محددًا وبيانات أخرى خاصة بالمورد. يستعلم TIS عن Media CAS لتحديد ما إذا كان هناك مكون إضافي لـ CAS يمكنه التعامل مع واصف CA.

رسم تخطيطي لضبط محتوى CAS.

الشكل 3. ضبط محتوى CAS

إذا كان معرف نظام CA مدعومًا، فسيتم إنشاء مثيل Media CAS ويتم توفير بيانات البائع الخاصة من واصف CA إلى البرنامج الإضافي. بعد ذلك، يتم فتح جلسات جديدة في Media CAS للتعامل مع تدفقات الصوت والفيديو. تتلقى الجلسات المفتوحة حديثًا ECMs وEMMs للمكون الإضافي.

نموذج لتدفق البرنامج المساعد CAS

تقوم TIS بتسليم ECMs إلى البرنامج المساعد CAS باستخدام Media CAS APIs. تحتوي وحدة ECM على كلمة تحكم مشفرة، والتي يجب فك تشفيرها باستخدام معلومات من EMM. يحدد المكون الإضافي CAS كيفية الحصول على EMM للأصل بناءً على المعلومات الخاصة بالبائع في واصف CA، والذي يتم توفيره بواسطة طريقة setPrivateData() .

قد يتم تسليم EMMs في النطاق في دفق المحتوى أو خارج النطاق باستخدام طلب شبكة يبدأ بواسطة البرنامج الإضافي CA. يستخدم TIS طريقة processEMM() لتسليم أي EMMs في النطاق إلى البرنامج الإضافي CA.

إذا كان طلب الشبكة مطلوبًا للحصول على EMM، فإن المكون الإضافي CA يكون مسؤولاً عن تنفيذ معاملة الشبكة مع خادم الترخيص.

رسم تخطيطي لمثال CAS.

الشكل 4. مثال على البرنامج المساعد CAS لمعالجة EMM وECM

عند استلام EMM، يقوم البرنامج الإضافي CA بتوزيعه للحصول على المفتاح المشفر لفك تشفير كلمة التحكم. قد يتم تحميل مفتاح EMM المشفر وكلمة التحكم المشفرة في سلم مفاتيح أو بيئة موثوقة لإجراء فك تشفير كلمة التحكم وإلغاء تشفير دفق المحتوى لاحقًا.

وسائل الإعلام CAS جافا API

يحتوي Media CAS Java API على الطرق التالية.

  • قم بإدراج جميع مكونات CA الإضافية المتوفرة على الجهاز.

    class MediaCas.PluginDescriptor {
      public String getName();
      public int getSystemId();
    }
    static PluginDescriptor[] enumeratePlugins();
    
  • إنشاء مثيل Media CAS لنظام CA المحدد. وهذا يعني أن إطار عمل Media 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. يمكن أن تأتي البيانات الخاصة من واصف 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. عندما يقوم جهاز بالتسجيل في خدمة تلفزيون مدفوعة الأجر لأول مرة، فإنه يحتاج إلى توفيره لخادم CAS أولاً. توفير مجموعة من المعلمات ذات الصلة بالجهاز للتوفير.

    void provision(String provisionString);
    
  • قم بتشغيل تحديث الاستحقاقات. عندما يشترك مستخدم في قناة جديدة (على سبيل المثال، من خلال الرد على إعلان أو عن طريق إضافة قناة على دليل البرامج الإلكتروني (EPG))، يجب أن يكون التطبيق قادرًا على إخبار عملاء CA بتحديث مفاتيح الاستحقاق.

    void refreshEntitlements(int refreshType);
    
  • أغلق كائن Media CAS.

    void close();
    
  • افتح جلسة.

    Session openSession();
    Session openSession(@SessionUsage int sessionUsage, @ScramblingMode int scramblingMode);
    
  • إغلاق جلسة مفتوحة مسبقًا.

    void Session#close();
    
  • قم بتوفير بيانات CA الخاصة من واصف CA في PMT، والذي يمكن أن يكون من معلومات البرنامج أو قسم معلومات ES، إلى جلسة CAS.

    void Session#setPrivateData(@NonNull byte[] sessionId, @NonNull byte[] data);
    
  • معالجة حزمة ECM لجلسة واحدة.

    void Session#processEcm(@NonNull byte[] data, int offset, int length);
    
  • الحصول على معرف الجلسة.

    byte[] Session#getSessionId();
    
  • إرسال حدث جلسة إلى نظام CA. تنسيق الحدث خاص بالمخطط وغير شفاف للإطار.

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