إدارة الحقوق الرقمية

يستخدم ExoPlayer واجهة برمجة تطبيقات MediaDrm على Android لإتاحة التشغيل المحمي بموجب إدارة الحقوق الرقمية. الحد الأدنى من إصدارات Android المطلوبة لمختلف أنظمة إدارة الحقوق الرقمية (DRM) المتوافقة، إلى جانب بتنسيقات البث المتوافقة معها، يمكن الاطّلاع عليها في الجدول التالي:

نظام إدارة الحقوق الرقمية رقم إصدار Android مستوى واجهة برمجة تطبيقات Android التنسيقات المعتمدة
ويديفين "cenc" 4.4 19 DASH، HLS (FMP4 فقط)
Widevine "cbcs" 7.1 25 DASH، HLS (FMP4 فقط)
محو مفتاح التشفير "cenc" 5 21 DASH
Playجاهز SL2000 "cenc" Android TV Android TV DASH وSmoothStreaming وHLS (FMP4 فقط)

لتشغيل المحتوى المحمي بموجب إدارة الحقوق الرقمية باستخدام ExoPlayer، يجب إدخال المعرّف الفريد العالمي لإدارة الحقوق الرقمية. يجب تحديد النظام عند إنشاء عنصر وسائط يمكن أيضًا تقديمها. سيستخدم المشغل بعد ذلك هذه الخصائص إنشاء عملية تنفيذ تلقائية لـ DrmSessionManager، يُسمى DefaultDrmSessionManager، هذا الإجراء مناسب لمعظم حالات الاستخدام. لبعض الاستخدامات قد تكون هناك حاجة إلى استخدام خصائص DRM إضافية، على النحو المبين في ما يلي: الأقسام.

تدوير المفتاح

لتشغيل أحداث البث باستخدام مفاتيح دوارة، يُرجى تمرير true إلى MediaItem.DrmConfiguration.Builder.setMultiSession عند إنشاء الوسائط عنصر واحد.

المحتوى المتعدد المفاتيح

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

الحالة الأولى: يستجيب خادم الترخيص باستخدام جميع المفاتيح للمحتوى

في هذه الحالة، يتم تهيئة خادم الترخيص بحيث عندما يتلقى لطلب مفتاح واحد، فإنه يستجيب لجميع المفاتيح الخاصة بالمحتوى. هذه الحالة هي التي تتم معالجتها بواسطة ExoPlayer بدون الحاجة إلى أي إعدادات خاصة. التكيّف بين أحداث البث (مثل الفيديوهات ذات الدقة العادية أو العالية الدقة) سلسة حتى لو تم استخدام عناصر مختلفة المفاتيح.

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

الحالة الثانية: يستجيب خادم الترخيص باستخدام المفتاح المطلوب فقط

في هذه الحالة، يتم ضبط خادم الترخيص ليستجيب بالمفتاح فقط. المحددة في الطلب. يمكن تشغيل المحتوى المتعدد المفاتيح باستخدام هذا الترخيص إعداد الخادم من خلال تمرير true إلى MediaItem.DrmConfiguration.Builder.setMultiSession عند إنشاء الوسائط عنصر واحد.

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

المفاتيح المتاحة بلا اتصال بالإنترنت

يمكن تحميل مجموعة مفاتيح بلا اتصال بالإنترنت من خلال تمرير رقم تعريف مجموعة المفاتيح إلى MediaItem.DrmConfiguration.Builder.setKeySetId عند إنشاء ملف الوسائط. يسمح هذا الإجراء بتشغيل المحتوى باستخدام المفاتيح المخزّنة في مفتاح عدم الاتصال بالإنترنت المحدّد مع المُعرّف المحدد.

جلسات إدارة الحقوق الرقمية للمحتوى الواضح

يؤدي استخدام العنصر النائب DrmSessions إلى السماح لـ ExoPlayer باستخدام برامج فك الترميز نفسها وضوح المحتوى المستخدم عند تشغيل المحتوى المشفّر. عندما تحتوي الوسائط على القسمين الواضحين والمشفّرين معًا، يمكنك استخدام العنصر النائب DrmSessions لتجنب إعادة إنشاء برامج فك الترميز عند الانتقال بين البيانات الواضحة والمشفرة الأقسام المختلفة. يمكن أن يؤدي استخدام العنصر النائب DrmSessions لمقاطع الصوت والفيديو إلى سيتم تفعيلها من خلال تمرير true إلى MediaItem.DrmConfiguration.Builder.forceSessionsForAudioAndVideoTracks عندما تقوم بإنشاء العنصر الإعلامي.

استخدام DrmSessionManager مخصص

إذا أراد أحد التطبيقات تخصيص DrmSessionManager المستخدَم للتشغيل، يمكنه تنفيذ DrmSessionManagerProvider وتمريرها إلى MediaSource.Factory التي يتم استخدامها عند إنشاء المشغّل يمكن لمقدِّم الخدمة اختيار ما إذا كان سيتم إنشاء مثيل مدير جديد في كل مرة أم لا. إلى دومًا يستخدمون نفس المثيل:

Kotlin

val customDrmSessionManager: DrmSessionManager = CustomDrmSessionManager()
// Pass a drm session manager provider to the media source factory.
val mediaSourceFactory =
  DefaultMediaSourceFactory(context).setDrmSessionManagerProvider { customDrmSessionManager }

Java

DrmSessionManager customDrmSessionManager = new CustomDrmSessionManager(/* ... */ );
// Pass a drm session manager provider to the media source factory.
MediaSource.Factory mediaSourceFactory =
    new DefaultMediaSourceFactory(context)
        .setDrmSessionManagerProvider(mediaItem -> customDrmSessionManager);

تحسين أداء التشغيل

إذا كنت تواجه تقطُّعًا في الفيديو عند تشغيل محتوى محمي بموجب إدارة الحقوق الرقمية (DRM) على جهاز يعمل بأي إصدار من نظام التشغيل Android بدءًا من الإصدار Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) وحتى بما في ذلك Android 11 (المستوى 30 لواجهة برمجة التطبيقات)، يمكنك محاولة تفعيل المخزن المؤقت غير المتزامن قيد الانتظار