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

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

مخطّط إدارة الحقوق الرقمية رقم إصدار Android مستوى واجهة برمجة تطبيقات Android التنسيقات المعتمدة
‫Widevine "cenc" 4.4 19 DASH، HLS (FMP4 فقط)
Widevine "cbcs" 7.1 25 DASH، HLS (FMP4 فقط)
ClearKey "cenc" 5.0 21 DASH
‫PlayReady SL2000 "cenc" Android TV Android TV DASH وSmoothStreaming وHLS (FMP4 فقط)

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

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

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

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

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

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

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

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

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

في هذه الحالة، يتم ضبط خادم الترخيص للردّ باستخدام المفتاح المحدّد فقط في الطلب. يمكن تشغيل المحتوى المزوّد بمفاتيح متعددة باستخدام إعدادات ملف الترخيص هذا على الخادم من خلال ضبط 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);

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

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