Oynatma listesi API'si, MediaItem.Builder kullanılarak kolayca oluşturulabilen MediaItem örneklerini temel alır. Oynatıcıda MediaItem, MediaSource.Factory tarafından oynatılabilir bir MediaSource biçimine 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ğıdaki bölümlerde 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 kimlik ve ekli meta verilerle bir medya öğesi oluşturulmaktadır:
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 yararlı olabilir.
Resimler
Resimlerin oynatılması için medya öğesinde, oynatma sırasında resmin ne kadar süre gösterileceğini belirten bir süre gerekir. Görseller kılavuz sayfasını inceleyin hareketli fotoğraflar ve Resim Yükleme Kitaplıkları (ör. Glide) hakkında daha fazla bilgi için.
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 uyarlanabilir medya öğelerinin URI'si 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();
Aşamalı medya akışları için MIME türü gerekli değildir.
Korunan 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 oturumun gerektiğ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ıda DefaultMediaSourceFactory, bu özellikleri bir DrmSessionManagerProvider öğesine ileterek DrmSessionManager elde eder. Bu öğe daha sonra oluşturulan MediaSource öğesine eklenir. DRM davranışı, ihtiyaçlarınıza göre daha fazla özelleştirilebilir.
Başka cihazdan yüklenen altyazı parçaları
Altyazı parçalarını başka bir kaynaktan yüklemek için medya öğesi oluşturulurken MediaItem.Subtitle örnekleri eklenebilir:
Kotlin
val subtitle = 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() 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 MergingMediaSource kullanır. DefaultMediaSourceFactory, çok dönemli DASH için altyazıların başka cihazdan yüklenmesini desteklemez.
Medya akışını kırpma
Bir medya öğesinin referans verdiği 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 ClippingMediaSource kullanır. Ek kırpma özellikleri vardır. Daha fazla bilgi için MediaItem.Builder Javadoc'u 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()) .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ımlanan reklamları eklemek için içerik medya kaynağını bir AdsMediaSource ile sarmalar. Bunun çalışması için oynatıcının da DefaultMediaSourceFactory
buna göre yapılandırılmış olması gerekir.