Medya öğeleri

playlist API, MediaItem.Builder ile kolayca oluşturulabilen MediaItem örneklerini temel alır. Oynatıcının içindeki bir MediaItem, MediaSource.Factory ile oynanabilir bir MediaSource öğesine dönüştürülür. Özel yapılandırma kullanılmadığında, 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 aşağıda özetlenmiştir.

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 kimlik ve bazı ekli meta verilerle 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 gerçekleştiğinde uygulamanızın kullanıcı arayüzünü güncellemek için faydalı olabilir.

Standart olmayan dosya uzantılarını işleme

ExoPlayer; DASH, HLS ve SmoothStreaming için uyarlanabilir medya kaynakları sağlar. Bu tür bir uyarlanabilir medya öğesinin URI'sı standart bir dosya uzantısıyla bitiyorsa ilgili medya kaynağı otomatik olarak oluşturulur. URI'da standart olmayan bir uzantı varsa veya hiç uzantı 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'sının doğrudan medyada bulunmadığı (ör. bir DASH oynatma listesinde) ve birden fazla oturumun gerekli olduğu (ör. anahtar rotasyonu nedeniyle) Widevine DRM ile korunan bir öğeyi oynatmaya yönelik ö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ının içinde DefaultMediaSourceFactory, bu özellikleri bir DrmSessionManagerProvider ile aktarıp DrmSessionManager elde eder ve bu işlem daha sonra oluşturulan MediaSource öğesine eklenir. DRM davranışı, ihtiyaçlarınıza göre daha da özelleştirilebilir.

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

Altyazı parçalarını başka cihazdan yüklemek için medya öğesi oluştururken MediaItem.Subtitle örnek 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();

DefaultMediaSourceFactory dahili olarak içerik medya kaynağını her bir 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 başka cihazdan yüklenmesini desteklemez.

Medya akışı oluşturma

Bir medya öğesinin atıfta bulunduğu içerikten klip oluşturmak 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 içerik medya kaynağını sarmalamak için bir ClippingMediaSource kullanır. Başka kırpma özellikleri var. Daha fazla bilgi için MediaItem.Builder Javadoc sayfasını inceleyin.

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, reklamları reklam etiketinde tanımlanan şekilde eklemek için içerik medya kaynağını dahili olarak AdsMediaSource içinde sarmalar. Bunun çalışması için oynatıcının DefaultMediaSourceFactory öğesini de uygun şekilde yapılandırması gerekir.