playlist API, kullanımı kolay bir şekilde 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
. Ö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 ayarlanabilecek bazı özellikler
bölümüne göz atın.
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,
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, oynatma listesi geçişleri olduğunda uygulamanızın kullanıcı arayüzünü güncellemek için yararlı 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 için uyarlanabilir medya kaynakları sağlar. 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 gereklidir, 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
.
, 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();
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
başka cihazdan yüklemeyi desteklemiyor
çok dönemli DASH altyazıları.
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();
DefaultMediaSourceFactory
dahili olarak sarmalamak için ClippingMediaSource
kullanır
içerik medya kaynağı. Ek kırpma özellikleri vardır. Daha fazla bilgi 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();
DefaultMediaSourceFactory
, dahili olarak içerik medya kaynağını
Reklamları reklam etiketinde tanımlanan şekilde eklemek için AdsMediaSource
. Bunun çalışması için oynatıcının DefaultMediaSourceFactory
uygun şekilde yapılandırılmış olması da gerekir.