Oynatma listesi API'si, MediaItem örneklerine dayanır ve MediaItem.Builder kullanılarak kolayca oluşturulabilir. Oynatıcının içinde, MediaItem, MediaSource.Factory tarafından oynatılabilir bir MediaSource'ye 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 kimlik ve bazı ekli meta verilerle bir medya öğesi 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 yararlı olabilir.
Resimler
Resimlerin oynatılması için medya öğesinde, oynatma sırasında resmin ne kadar süreyle gösterileceğini belirten bir süre olması gerekir. Hareketli Fotoğraflar ve Resim Yükleme Kitaplıkları (ör. Glide) hakkında daha fazla bilgi için Resimler rehber 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 dışı 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ü gerekmez.
Korumalı içerik
Korumalı içeriklerde 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 öğeyi oynatmak için örnek yapılandırma.Bu örnekte, lisans URI'si doğrudan medyada (ör. DASH oynatma listesinde) kullanılamaz ve birden fazla oturum gerekir (ör.anahtar döndürme 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();
Oynatıcıda DefaultMediaSourceFactory, DrmSessionManager elde etmek için bu özellikleri DrmSessionManagerProvider öğesine iletir. DrmSessionManager daha sonra oluşturulan MediaSource öğesine yerleştirilir. DRM davranışı, ihtiyaçlarınıza göre daha fazla özelleştirilebilir.
Altyazı dosyalarını başka cihazdan yükleme
Altyazı dosyalarını yan 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 yan yüklenmesini desteklemez.
Medya akışını kırpma
Bir medya öğesinin belirttiğ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();
DefaultMediaSourceFactory, dahili olarak içerik medya kaynağını sarmak için ClippingMediaSource kullanır. Ek kırpma özellikleri vardır. Daha fazla ayrıntı 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();
DefaultMediaSourceFactory, reklam etiketinde tanımlandığı şekilde reklam eklemek için içerik medya kaynağını dahili olarak AdsMediaSource ile sarmalar. Bu özelliğin çalışması için oynatıcının DefaultMediaSourceFactory
uygun şekilde yapılandırılması gerekir.