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