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 tarafından oynanabilir bir MediaSource öğesine dönüştürülür. Özel yapılandırma olmadan, bu dönüştürme işlemi medya öğesinin özelliklerine karşılık gelen karmaşık medya kaynakları oluşturabilen bir DefaultMediaSourceFactory tarafından gerçekleştirilir. Medya öğeleri üzerinde ayarlanabilecek özelliklerden bazıları aşağıda özetlenmiştir.

Basit medya öğeleri

fromUri kolaylık yöntemi kullanılarak yalnızca akış URI'sinden oluşan bir medya öğesi oluşturulabilir:

Kotlin

val mediaItem = MediaItem.fromUri(videoUri)

Java

MediaItem mediaItem = MediaItem.fromUri(videoUri);

Diğer tüm durumlarda bir MediaItem.Builder kullanılabilir. Aşağıdaki örnekte, bir kimlik ve bazı ekli meta verilerle bir medya öğesi derlenmiştir:

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

Oynatma listesi geçişleri olduğunda meta veri eklemek, uygulamanızın kullanıcı arayüzünü güncellemek için yararlı 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'si standart bir dosya uzantısıyla biterse 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ü gösterecek şekilde açık bir şekilde 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:

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

Bu örnek, Widevine ile korunan içerik için bir medya öğesi oluşturur. DefaultMediaSourceFactory, oynatıcının içinde bu özellikleri bir DrmSessionManagerProvider öğesine iletir. Ardından DrmSessionManager elde edilir ve bu değer, oluşturulan MediaSource öğesine yerleştirilir. DRM davranışı ihtiyaçlarınıza göre daha da özelleştirilebilir.

Başka cihazdan yükleme altyazı parçaları

Altyazı parçalarını başka cihazdan 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();

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

Medya akışından klip oluşturma

Bir medya öğesinin başvurduğu içerikten kırpmak için özel başlangıç ve bitiş konumlarını 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, içerik medya kaynağını sarmalamak için dahili olarak bir ClippingMediaSource kullanır. Ek kırpma özellikleri vardır. Daha fazla bilgi için MediaItem.Builder Javadoc'a bakın.

Reklam ekleme

Reklam eklemek için medya öğesinin reklam etiketi URI'si ö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, reklam etiketi tarafından tanımlandığı gibi reklam eklemek için içerik medya kaynağını dahili olarak bir AdsMediaSource ile sarmalar. Bunun işe yaraması için oynatıcının DefaultMediaSourceFactory öğesini de uygun şekilde yapılandırılması gerekir.