Medya öğeleri

Playlist API, MediaItem.Builder kullanılarak kolayca oluşturulabilen MediaItem örneklerine dayanır. Oynatıcı içinde, MediaItem bir MediaSource.Factory tarafından oynatılabilir MediaSource'a dönüştürülür. Özel yapılandırma olmadan bu dönüşüm, medya öğesinin özelliklerine karşılık gelen karmaşık medya kaynakları oluşturabilen bir DefaultMediaSourceFactory tarafından gerçekleştirilir. Medya öğelerinde ayarlanabilen özelliklerden bazıları aşağıda açıklanmıştır.

Basit medya öğeleri

Yalnızca akış URI'sinden oluşan bir medya öğesi, fromUri kolaylık yöntemiyle oluşturulabilir:

Kotlin

val mediaItem = MediaItem.fromUri(videoUri)

Java

MediaItem mediaItem = MediaItem.fromUri(videoUri);

Diğer tüm durumlarda MediaItem.Builder kullanılabilir. Aşağıdaki örnekte, bir medya öğesi bir kimlikle ve bazı ekli meta verileriyle oluşturulmuştur:

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();

Meta veri eklemek, oynatma listesi geçişleri sırasında uygulamanızın kullanıcı arayüzünü güncellemek için yararlı olabilir.

Resimler

Resimlerin oynatılması için medya öğesinde, oynatma sırasında resmin ne kadar süre boyunca gösterileceğini belirten bir sürenin belirtilmesi gerekir. Hareketli Fotoğraflar ve Resim Yükleme Kitaplıkları (ör. Glide) hakkında daha fazla bilgi için Resimler kılavuz sayfasına bakın.

Kotlin

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

Java

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

Uyarlanabilir medya için standart olmayan dosya uzantıları

ExoPlayer, DASH, HLS ve SmoothStreaming için uyarlanabilir medya kaynakları sağlar. Bu tür bir uyarlanabilir medya öğesinin URI'si standart bir dosya uzantısıyla bitiyorsa ilgili medya kaynağı otomatik olarak oluşturulur. URI'nin standart olmayan bir uzantısı varsa veya hiç uzantısı yoksa MIME türü, medya öğesinin türünü belirtmek için açıkça ayarlanabilir:

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();

Progresif medya akışları için MIME türü gerekli değildir.

Korumalı içerik

Korunan içerik için medya öğesinin DRM özellikleri ayarlanmalıdır. UUID zorunludur, diğer tüm özellikler isteğe bağlıdır.

Lisans URI'sinin doğrudan medyada (ör. DASH oynatma listesinde) bulunmadığı ve birden fazla oturum gerektirdiği (ör. anahtar rotasyonu nedeniyle) Widevine DRM ile korunan bir öğeyi oynatmak için örnek yapılandırma:

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();

Oynatıcı içinde DefaultMediaSourceFactory, bu özellikleri bir DrmSessionManagerProvider'a ileterek DrmSessionManager elde eder. Bu DrmSessionManager daha sonra oluşturulan MediaSource'a enjekte edilir. DRM davranışı, ihtiyaçlarınıza göre daha da özelleştirilebilir.

Altyazı parçalarını başka cihazdan yükleme

Altyazı kanallarını yan yüklemek için medya öğesi oluştururken MediaItem.Subtitle örnekleri eklenebilir:

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();

Dahili olarak DefaultMediaSourceFactory, içerik medya kaynağını her altyazı parçası için bir SingleSampleMediaSource ile birleştirmek üzere bir MergingMediaSource kullanır. DefaultMediaSourceFactory, çok dönemli DASH için altyazıların harici olarak yüklenmesini desteklemez.

Medya akışını kırpma

Bir medya öğesinin atıfta bulunduğu içeriği kırpmak için özel başlangıç ve bitiş konumları ayarlayın:

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();

Dahili olarak DefaultMediaSourceFactory, içerik medya kaynağını sarmalamak için bir ClippingMediaSource kullanır. Ek kırpma özellikleri vardır. Daha fazla ayrıntı için MediaItem.Builder Javadoc sayfasına bakın.

Reklam ekleme

Reklam eklemek için medya öğesinin reklam etiketi URI özelliği ayarlanmalıdır:

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();

Dahili olarak DefaultMediaSourceFactory, reklam etiketi tarafından tanımlandığı şekilde reklam eklemek için içerik medya kaynağını bir AdsMediaSource içine sarar. Bunun çalışması için oynatıcının DefaultMediaSourceFactory'sinin de uygun şekilde yapılandırılması gerekir.