فایل‌های رسانه‌ای

میانای برنامه‌سازی کاربردی فهرست پخش براساس MediaItem نمونه است که می‌توان به‌راحتی بااستفاده از MediaItem.Builder آن‌ها را ساخت. درون پخش‌کننده، MediaItem توسط MediaSource.Factory به MediaSource قابل‌پخش تبدیل می‌شود. بدون پیکربندی سفارشی، این تبدیل توسط DefaultMediaSourceFactory انجام می‌شود که قادر به ساختن منابع رسانه‌ای پیچیده متناسب با ویژگی‌های مورد رسانه‌ای است. برخی‌از دارایی‌هایی که می‌توانند روی عناصر رسانه‌ای تنظیم شوند در زیر فهرست شده‌اند.

فایل‌های رسانه‌ای ساده

مورد رسانه‌ای که فقط از نشانی وب جاری‌سازی تشکیل شده است را می‌توان با fromUri روش آسان ساخت:

کاتلین

val mediaItem = MediaItem.fromUri(videoUri)

جاوا

MediaItem mediaItem = MediaItem.fromUri(videoUri);

برای همه موارد دیگر، می‌توان از MediaItem.Builder استفاده کرد. در مثال زیر، یک عنصر رسانه‌ای با شناسه و مقداری فراداده پیوست‌شده ساخته می‌شود:

کاتلین

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

جاوا

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

پیوست کردن فراداده می‌تواند برای به‌روزرسانی واسط کاربر برنامه هنگام انتقال فهرست پخش مفید باشد.

تصاویر

برای بازپخش تصاویر، باید مدت زمانی در عنصر رسانه‌ای مشخص شود تا تعیین کند تصویر درطول بازپخش برای چه مدت نمایش داده شود. برای اطلاعات بیشتر درباره عکس‌های متحرک و کتابخانه‌های بارگیری تصویر (برای نمونه، Glide)، به صفحه راهنمای تصاویر مراجعه کنید.

کاتلین

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

جاوا

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

پسوندهای فایل غیرمعمول برای رسانه تطبیقی

‫ExoPlayer منابع رسانه‌ای تطبیقی برای DASH،‏ HLS، و SmoothStreaming ارائه می‌دهد. اگر نشانی وب چنین عنصر رسانه‌ای تطبیقی با پسوند فایل استاندارد به‌پایان برسد، منبع رسانه‌ای مربوطه به‌طور خودکار ایجاد می‌شود. اگر URI دارای افزونه غیر استاندارد یا بدون افزونه باشد، نوع MIME می‌تواند به‌صورت صریح برای نشان دادن نوع عنصر رسانه‌ای تنظیم شود:

کاتلین

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

جاوا

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

برای جاری‌سازی‌های رسانه‌ای پیش‌رونده، نوع MIME لازم نیست.

محتوای محافظت‌شده

برای محتوای محافظت‌شده، باید دارایی‌های مدیریت حقوق دیجیتال عنصر رسانه تنظیم شود. ‫UUID الزامی است، همه دارایی‌های دیگر اختیاری است.

نمونه پیکربندی برای پخش یک مورد محافظت‌شده با Widevine DRM که در آن نشانی وب پروانه مستقیماً در رسانه دردسترس نیست (برای نمونه، در فهرست پخش DASH) و چندین جلسه لازم است (برای نمونه، به‌دلیل چرخش کلید):

کاتلین

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

جاوا

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 ایجادشده تزریق می‌شود. عملکرد DRM را می‌توانید بیشتر سفارشی‌سازی کنید تا با نیازهایتان مطابقت داشته باشد.

درحال نصب غیررسمی قطعه‌های زیرنویس ناشنوایان

برای بارگذاری جانبی قطعه‌های زیرنویس ناشنوایان، هنگام ساختن عنصر رسانه می‌توان MediaItem.Subtitle نمونه اضافه کرد:

کاتلین

val subtitle =
  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()
val mediaItem =
  MediaItem.Builder().setUri(videoUri).setSubtitleConfigurations(listOf(subtitle)).build()

جاوا

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 چند دوره‌ای پشتیبانی نمی‌کند.

برش دادن جاری‌سازی رسانه

برای برش محتوای ارجاع‌شده توسط یک عنصر رسانه‌ای، موقعیت‌های شروع و پایان سفارشی را تنظیم کنید:

کاتلین

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

جاوا

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

داخلی، DefaultMediaSourceFactory از ClippingMediaSource برای بسته‌بندی منبع رسانه‌ای محتوا استفاده خواهد کرد. خواص برش اضافی وجود دارد. برای جزئیات بیشتر، MediaItem.Builder Javadoc را ببینید.

درج آگهی

برای درج آگهی، دارایی نشانی وب برچسب آگهی عنصر رسانه‌ای باید تنظیم شود:

کاتلین

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

جاوا

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

در داخل، DefaultMediaSourceFactory منبع رسانه محتوا را در AdsMediaSource می‌پیچد تا آگهی‌ها را طبق تعریف برچسب آگهی درج کند. برای اینکه این ویژگی کار کند، پخش‌کننده نیز باید DefaultMediaSourceFactory خود را مطابق با آن پیکربندی کند.