Medya öğeleri

playlist API, kolayca 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. Yok: özel yapılandırma kullanıyorsanız Bu dönüşüm, DefaultMediaSourceFactory tarafından gerçekleştirilir. özelliklerine karşılık gelen karmaşık medya kaynakları oluşturabilme medya öğesi. Medya öğelerinde ayarlanabilecek bazı özellikler bölümüne göz atın.

Basit medya öğeleri

fromUri ile yalnızca akış URI'sından oluşan bir medya öğesi oluşturulabilir kolaylık yöntemi:

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 şu konularda faydalı olabilir: uygulamanızın kullanıcı arayüzünü güncelleme oynatma listesi geçişleri gerçekleştiğinde söz konusu 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. 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 gerekliyse, 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. Bu durumda , 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();

DefaultMediaSourceFactory dahili olarak MergingMediaSource kullanarak içerik medya kaynağını her biri için bir SingleSampleMediaSource ile birleştirin altyazı parçası. DefaultMediaSourceFactory başka cihazdan yüklemeyi desteklemiyor çok dönemli DASH altyazıları.

Medya akışı oluşturma

Bir medya öğesinin atıfta bulunduğu içerikten klip oluşturmak için başlangıç ve bitiş konumları:

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ğı. Başka kırpma özellikleri var. Bkz. Ayrıntılı bilgi için MediaItem.Builder Javadoc.

Reklam ekleme

Reklam eklemek için bir 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 işe yarayabilmesi için oyuncunun DefaultMediaSourceFactory olması da gerekir uygun şekilde yapılandırılmalıdır.