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

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

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

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