playlist API, MediaItem.Builder
ile kolayca oluşturulabilen MediaItem
örneklerini temel alır. Oynatıcının içindeki bir MediaItem
, MediaSource.Factory
ile oynanabilir bir MediaSource
öğesine dönüştürülür. Özel yapılandırma kullanılmadığında, 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 aşağıda özetlenmiştir.
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 kimlik ve bazı ekli meta verilerle 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 faydalı 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'sı 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();
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'sının doğrudan medyada bulunmadığı (ör. bir DASH oynatma listesinde) ve birden fazla oturumun gerekli olduğu (ör. anahtar rotasyonu nedeniyle) Widevine DRM ile korunan bir öğeyi oynatmaya yönelik ö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ının içinde DefaultMediaSourceFactory
, bu özellikleri bir DrmSessionManagerProvider
ile aktarıp DrmSessionManager
elde eder ve bu işlem daha sonra oluşturulan MediaSource
öğesine eklenir. DRM davranışı, ihtiyaçlarınıza göre daha da özelleştirilebilir.
Altyazı parçalarını başka cihazdan yükleme
Altyazı parçalarını başka cihazdan yüklemek için medya öğesi oluştururken MediaItem.Subtitle
örnek 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
dahili olarak içerik medya kaynağını her bir 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 başka cihazdan yüklenmesini desteklemez.
Medya akışı oluşturma
Bir medya öğesinin atıfta bulunduğu içerikten klip oluşturmak 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ı sarmalamak için bir ClippingMediaSource
kullanır. Başka kırpma özellikleri var. Daha fazla bilgi için MediaItem.Builder
Javadoc sayfasını 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())
Java
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setAdsConfiguration(new MediaItem.AdsConfiguration.Builder(adTagUri).build()) .build();
DefaultMediaSourceFactory
, reklamları reklam etiketinde tanımlanan şekilde eklemek için içerik medya kaynağını dahili olarak AdsMediaSource
içinde sarmalar. Bunun çalışması için oynatıcının DefaultMediaSourceFactory
öğesini de uygun şekilde yapılandırması gerekir.