Playlist API, MediaItem.Builder
kullanılarak kolayca oluşturulabilen MediaItem
örneklerine dayanır. Oynatıcı içinde, MediaItem
bir MediaSource.Factory
tarafından oynatılabilir MediaSource
'a 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ğıda 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 medya öğesi bir kimlikle ve bazı ekli meta verileriyle 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 sırasında 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 boyunca gösterileceğini belirten bir sürenin belirtilmesi gerekir. Hareketli Fotoğraflar ve Resim Yükleme Kitaplıkları (ör. Glide) hakkında daha fazla bilgi için Resimler kılavuz sayfasına bakın.
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'si standart bir dosya uzantısıyla bitiyorsa ilgili medya kaynağı otomatik olarak oluşturulur. URI'nin standart olmayan bir uzantısı varsa veya hiç uzantısı 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'sinin doğrudan medyada (ör. DASH oynatma listesinde) bulunmadığı ve birden fazla oturum gerektirdiğ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ı içinde DefaultMediaSourceFactory
, bu özellikleri bir DrmSessionManagerProvider
'a ileterek DrmSessionManager
elde eder. Bu DrmSessionManager
daha sonra oluşturulan MediaSource
'a enjekte edilir. DRM davranışı, ihtiyaçlarınıza göre daha da özelleştirilebilir.
Altyazı parçalarını başka cihazdan yükleme
Altyazı kanallarını yan 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();
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
, çok dönemli DASH için altyazıların harici olarak yüklenmesini desteklemez.
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();
Dahili olarak DefaultMediaSourceFactory
, içerik medya kaynağını sarmalamak için bir ClippingMediaSource
kullanır. Ek kırpma özellikleri vardır. Daha fazla ayrıntı 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();
Dahili olarak DefaultMediaSourceFactory
, reklam etiketi tarafından tanımlandığı şekilde reklam eklemek için içerik medya kaynağını bir AdsMediaSource
içine sarar. Bunun çalışması için oynatıcının DefaultMediaSourceFactory
'sinin de uygun şekilde yapılandırılması gerekir.