Medya öğeleri

playlist API, kullanımı kolay bir şekilde oluşturulabilen MediaItem örneklerini temel alır MediaItem.Builder kullanılıyor. Oynatıcının içindeki bir MediaItem, MediaSource.Factory tarafından oynanabilir MediaSource. Ö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 ayarlanabilecek bazı özellikler bölümüne göz atın.

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, medya öğesi, bir kimlik ve bazı ekli meta verilerle oluşturulur:

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 olduğunda uygulamanızın kullanıcı arayüzünü güncellemek için yararlı olabilir.

Resimler

Resimlerin oynatılması için medya öğesinde ne kadar süreyle bir süre belirtilmesi gerektiğinin belirtilmesi gerekir oynatma sırasında resim gösterilir. Bkz. Daha fazla bilgi için Görseller rehber sayfası Hareketli Fotoğraflar ve Resim Yükleme Kitaplıkları (örneğin, Glide).

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'sı bir standart dosya uzantısını yüklediğinizde ilgili medya kaynağı otomatik olarak oluşturulur. Öğe URI'nin standart dışı bir uzantısı varsa veya hiç uzantısı yoksa MIME türü değeri açıkça medya öğesinin türünü belirtecek şekilde ayarlanmalıdır:

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 gereklidir, diğer tüm özellikler isteğe bağlıdır.

Widevine DRM ile korunan bir öğenin oynatılması için örnek yapılandırmada Lisans URI'si doğrudan medyada kullanılamaz (ör. bir DASH oynatma listesinde) ve birden fazla oturum gerekli (ör. anahtar rotasyonu nedeniyle):

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

İç mekan oynatıcıya gönderilirse DefaultMediaSourceFactory bu özellikleri DrmSessionManager almak için DrmSessionManagerProvider. , oluşturulan MediaSource öğesine eklendi. DRM davranışı, daha fazla özelleştirilmiş seçin.

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

Altyazı parçalarını başka cihazdan yüklemek için aşağıdaki durumlarda MediaItem.Subtitle örnek eklenebilir: medya öğesi oluşturma:

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 başka cihazdan yüklemeyi desteklemiyor çok dönemli DASH altyazıları.

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

DefaultMediaSourceFactory dahili olarak sarmalamak için ClippingMediaSource kullanır içerik medya kaynağı. Ek kırpma özellikleri vardır. Daha fazla bilgi 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();

DefaultMediaSourceFactory, dahili olarak içerik medya kaynağını Reklamları reklam etiketinde tanımlanan şekilde eklemek için AdsMediaSource. Bunun çalışması için oynatıcının DefaultMediaSourceFactoryuygun şekilde yapılandırılmış olması da gerekir.