playlist API, MediaItem.Builder
ile kolayca oluşturulabilen MediaItem
örneklerini temel alır. Oynatıcının içindeki bir MediaItem
, MediaSource.Factory
tarafından oynanabilir bir MediaSource
öğesine dönüştürülür. Özel yapılandırma olmadan, bu dönüştürme işlemi medya öğesinin özelliklerine karşılık gelen karmaşık medya kaynakları oluşturabilen bir DefaultMediaSourceFactory
tarafından gerçekleştirilir. Medya öğeleri üzerinde ayarlanabilecek özelliklerden bazıları aşağıda özetlenmiştir.
Basit medya öğeleri
fromUri
kolaylık yöntemi kullanılarak yalnızca akış URI'sinden oluşan bir medya öğesi oluşturulabilir:
Kotlin
val mediaItem = MediaItem.fromUri(videoUri)
Java
MediaItem mediaItem = MediaItem.fromUri(videoUri);
Diğer tüm durumlarda bir MediaItem.Builder
kullanılabilir. Aşağıdaki örnekte, bir kimlik ve bazı ekli meta verilerle bir medya öğesi derlenmiştir:
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();
Oynatma listesi geçişleri olduğunda meta veri eklemek, uygulamanızın kullanıcı arayüzünü güncellemek için yararlı 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'si standart bir dosya uzantısıyla biterse 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ü gösterecek şekilde açık bir şekilde 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:
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();
Bu örnek, Widevine ile korunan içerik için bir medya öğesi oluşturur. DefaultMediaSourceFactory
, oynatıcının içinde bu özellikleri bir DrmSessionManagerProvider
öğesine iletir. Ardından DrmSessionManager
elde edilir ve bu değer, oluşturulan MediaSource
öğesine yerleştirilir. DRM davranışı ihtiyaçlarınıza göre daha da özelleştirilebilir.
Başka cihazdan yükleme altyazı parçaları
Altyazı parçalarını başka cihazdan 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();
DefaultMediaSourceFactory
, her altyazı parçası için içerik medya kaynağını bir SingleSampleMediaSource
ile birleştirmek üzere dahili olarak bir MergingMediaSource
kullanır. DefaultMediaSourceFactory
, çok dönemli DASH için başka cihazdan yükleme altyazılarını desteklemez.
Medya akışından klip oluşturma
Bir medya öğesinin başvurduğu içerikten kırpmak için özel başlangıç ve bitiş konumlarını 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
, içerik medya kaynağını sarmalamak için dahili olarak bir ClippingMediaSource
kullanır. Ek kırpma özellikleri vardır. Daha fazla bilgi için MediaItem.Builder
Javadoc'a bakın.
Reklam ekleme
Reklam eklemek için medya öğesinin reklam etiketi URI'si ö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
, reklam etiketi tarafından tanımlandığı gibi reklam eklemek için içerik medya kaynağını dahili olarak bir AdsMediaSource
ile sarmalar. Bunun işe yaraması için oynatıcının DefaultMediaSourceFactory
öğesini de uygun şekilde yapılandırılması gerekir.