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