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

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

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

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

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

لتشغيل أحداث البث باستخدام مفاتيح تدوير، أدخِل 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 لواجهة برمجة التطبيقات)، يمكنك محاولة تفعيل ميزة المخزن المؤقت غير المتزامن في قائمة الانتظار.