عناصر الوسائط

تستند playlist API إلى مثيل MediaItem يمكن إنشاؤه بسهولة. باستخدام MediaItem.Builder. يتم تحويل "MediaItem" داخل المشغّل إلى MediaSource قابلة للتشغيل من MediaSource.Factory. بدون الضبط المخصص، يتم إجراء هذه الإحالة الناجحة من خلال DefaultMediaSourceFactory، وهي قادرة على إنشاء مصادر وسائط معقدة تتوافق مع خصائص ملف وسائط. تم توضيح بعض السمات التي يمكن ضبطها على عناصر الوسائط. أدناه.

عناصر الوسائط البسيطة

يمكن إنشاء ملف وسائط يتألف من عنوان URL للبث فقط باستخدام fromUri. طريقة ملائمة:

Kotlin

val mediaItem = MediaItem.fromUri(videoUri)

Java

MediaItem mediaItem = MediaItem.fromUri(videoUri);

أمّا بالنسبة إلى جميع الحالات الأخرى، فيمكن استخدام MediaItem.Builder. في المثال التالي، تشير تم إنشاء عنصر وسائط مع معرف وبعض البيانات الوصفية المرفقة:

Kotlin

val mediaItem = MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build()

Java

MediaItem mediaItem =
    new MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build();

يمكن أن يكون إرفاق بيانات التعريف مفيدًا تحديث واجهة المستخدم في تطبيقك عند حدوث انتقالات قائمة التشغيل.

الصور

يتطلب تشغيل الصور مدة في عنصر الوسائط لتحديد المدة. ستظهر الصورة أثناء التشغيل. يمكنك الاطّلاع على يمكنك الاطّلاع على صفحة دليل الصور لمزيد من المعلومات عن الصور الحيّة مكتبات تحميل الصور (مثلاً، انزلاقي).

Kotlin

val mediaItem = MediaItem.Builder().setUri(imageUri).setImageDurationMs(3000).build()

Java

MediaItem mediaItem =
    new MediaItem.Builder().setUri(imageUri).setImageDurationMs(3_000).build();

امتدادات الملفات غير العادية للوسائط التكيُّفية

توفِّر ExoPlayer مصادر وسائط تكيُّفية لنظام DASH وHLS و البث السلس إذا كان معرّف الموارد المنتظم (URI) لعنصر الوسائط التكيُّفي هذا ينتهي بمعرّف امتداد الملف، فسيتم إنشاء مصدر الوسائط المقابل تلقائيًا. إذا كانت يشتمل معرّف الموارد المنتظم (URI) على إضافة غير قياسية أو لا يحتوي على أي إضافة على الإطلاق، ومن ثم يمكن يجب ضبطها صراحةً للإشارة إلى نوع عنصر الوسائط:

Kotlin

val mediaItem = MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build()

Java

MediaItem mediaItem =
    new MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build();

بالنسبة إلى مجموعات بث الوسائط التقدّمية، لا يجب استخدام نوع MIME.

المحتوى المحمي

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

مثال على تهيئة لتشغيل عنصر محمي باستخدام Widevine DRM حيث معرف الموارد المنتظم (URI) للترخيص غير متاح مباشرةً في الوسائط (على سبيل المثال، في قائمة تشغيل DASH) يتطلّب استخدام جلسات متعددة (على سبيل المثال، بسبب تدوير المفتاح):

Kotlin

val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setDrmConfiguration(
      MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
        .setLicenseUri(licenseUri)
        .setMultiSession(true)
        .setLicenseRequestHeaders(httpRequestHeaders)
        .build()
    )
    .build()

Java

MediaItem mediaItem =
    new MediaItem.Builder()
        .setUri(videoUri)
        .setDrmConfiguration(
            new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
                .setLicenseUri(licenseUri)
                .setMultiSession(true)
                .setLicenseRequestHeaders(httpRequestHeaders)
                .build())
        .build();

داخل لاعب، سيمرر DefaultMediaSourceFactory هذه الخصائص إلى DrmSessionManagerProvider للحصول على DrmSessionManager، وهي تم إدخاله في MediaSource الذي تم إنشاؤه. قد يكون سلوك إدارة الحقوق الرقمية مخصّصة بشكل أكبر لاحتياجاتك.

تحميل مقاطع الترجمة والشرح من مصدر غير معروف

لتحميل مقاطع الترجمة من مصدر غير معروف، يمكن إضافة MediaItem.Subtitle مثيل في حال إنشاء ملف وسائط:

Kotlin

val subtitle =
  SubtitleConfiguration.Builder(subtitleUri)
    .setMimeType(mimeType) // The correct MIME type (required).
    .setLanguage(language) // The subtitle language (optional).
    .setSelectionFlags(selectionFlags) // Selection flags for the track (optional).
    .build()
val mediaItem =
  MediaItem.Builder().setUri(videoUri).setSubtitleConfigurations(listOf(subtitle)).build()

Java

MediaItem.SubtitleConfiguration subtitle =
    new MediaItem.SubtitleConfiguration.Builder(subtitleUri)
        .setMimeType(mimeType) // The correct MIME type (required).
        .setLanguage(language) // The subtitle language (optional).
        .setSelectionFlags(selectionFlags) // Selection flags for the track (optional).
        .build();
MediaItem mediaItem =
    new MediaItem.Builder()
        .setUri(videoUri)
        .setSubtitleConfigurations(ImmutableList.of(subtitle))
        .build();

داخليًا، سيستخدم "DefaultMediaSourceFactory" MergingMediaSource من أجل دمج مصدر وسائط المحتوى مع SingleSampleMediaSource لكل مسار العنوان الفرعي. لا يتيح DefaultMediaSourceFactory التثبيت من مصدر غير معروف. ترجمات لـ DASH متعددة الفترات.

اقتصاص بث وسائط

لاقتصاص المحتوى الذي يشير إليه عنصر وسائط، اضبط موضعا البداية والانتهاء:

Kotlin

val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setClippingConfiguration(
      MediaItem.ClippingConfiguration.Builder()
        .setStartPositionMs(startPositionMs)
        .setEndPositionMs(endPositionMs)
        .build()
    )
    .build()

Java

MediaItem mediaItem =
    new MediaItem.Builder()
        .setUri(videoUri)
        .setClippingConfiguration(
            new ClippingConfiguration.Builder()
                .setStartPositionMs(startPositionMs)
                .setEndPositionMs(endPositionMs)
                .build())
        .build();

داخليًا، سيستخدم DefaultMediaSourceFactory ClippingMediaSource للالتفاف مصدر وسائط المحتوى. هناك خصائص اقتصاص إضافية. يمكنك الاطّلاع على MediaItem.Builder Javadoc لمزيد من التفاصيل.

إدراج إعلان

لإدراج إعلانات، يجب ضبط خاصية معرّف الموارد المنتظم (URI) لعلامة الإعلان الخاصة لعنصر الوسائط:

Kotlin

val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setAdsConfiguration(MediaItem.AdsConfiguration.Builder(adTagUri).build())

Java

MediaItem mediaItem =
    new MediaItem.Builder()
        .setUri(videoUri)
        .setAdsConfiguration(new MediaItem.AdsConfiguration.Builder(adTagUri).build())
        .build();

داخليًا، سيُضمّن DefaultMediaSourceFactory مصدر وسائط المحتوى في AdsMediaSource لإدراج الإعلانات وفقًا لما هو محدّد في علامة الإعلان. لكي ينجح ذلك، يجب أن يتوفّر لدى المشغّل أيضًا DefaultMediaSourceFactory تم ضبطها وفقًا لذلك.