ExoPlayer'da her medya parçası bir MediaItem
ile temsil edilir. Ancak oynatıcının içeriği oynatması için dahili olarak MediaSource
örneğine ihtiyacı vardır. Oynatıcı, MediaSource.Factory
kullanarak bunları medya öğelerinden oluşturur.
Oynatıcı varsayılan olarak aşağıdaki içerik MediaSource
uygulamalarının örneklerini oluşturabilen bir DefaultMediaSourceFactory
kullanır:
- DASH için
DashMediaSource
. - SmoothStreaming için
SsMediaSource
. - HLS için
HlsMediaSource
. - Normal medya dosyaları için
ProgressiveMediaSource
. - RTSP için
RtspMediaSource
.
DefaultMediaSourceFactory
, ilgili medya öğelerinin özelliklerine bağlı olarak daha karmaşık medya kaynakları da oluşturabilir. Bu konu Medya öğeleri sayfasında daha ayrıntılı bir şekilde açıklanmıştır.
Oynatıcının varsayılan yapılandırması tarafından desteklenmeyen medya kaynağı kurulumlarına ihtiyaç duyan uygulamalar için çeşitli özelleştirme seçenekleri vardır.
Medya kaynağı oluşturma işlemini özelleştirme
Oynatıcı oluşturulurken MediaSource.Factory
enjekte edilebilir. Örneğin, bir uygulama reklam eklemek ve önbelleğe almayı desteklemek için CacheDataSource.Factory
kullanmak istiyorsa DefaultMediaSourceFactory
örneği bu şartlara uyacak şekilde yapılandırılabilir ve oyuncu oluşturulurken eklenebilir:
Kotlin
val mediaSourceFactory: MediaSource.Factory = DefaultMediaSourceFactory(context) .setDataSourceFactory(cacheDataSourceFactory) .setLocalAdInsertionComponents(adsLoaderProvider, playerView) val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()
Java
MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setDataSourceFactory(cacheDataSourceFactory) .setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView); ExoPlayer player = new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();
Kullanılabilir seçenekler DefaultMediaSourceFactory
JavaDoc'da daha ayrıntılı olarak açıklanmaktadır.
Özel bir MediaSource.Factory
uygulaması da ekleyebilirsiniz (ör. özel bir medya kaynağı türü oluşturmayı desteklemek için). Şarkı listesine eklenen her medya öğesi için bir medya kaynağı oluşturmak üzere fabrikanın createMediaSource(MediaItem)
çağrılır.
Medya kaynağına dayalı oynatma listesi API'si
ExoPlayer
arayüzü, medya öğeleri yerine medya kaynaklarını kabul eden ek oynatma listesi yöntemleri tanımlar. Bu sayede oynatıcının dahili MediaSource.Factory
'sini atlayabilir ve medya kaynağı örneklerini doğrudan oynatıcıya iletebilirsiniz:
Kotlin
// Set a list of media sources as initial playlist. exoPlayer.setMediaSources(listOfMediaSources) // Add a single media source. exoPlayer.addMediaSource(anotherMediaSource) // Can be combined with the media item API. exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri)) exoPlayer.prepare() exoPlayer.play()
Java
// Set a list of media sources as initial playlist. exoPlayer.setMediaSources(listOfMediaSources); // Add a single media source. exoPlayer.addMediaSource(anotherMediaSource); // Can be combined with the media item API. exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri)); exoPlayer.prepare(); exoPlayer.play();
Gelişmiş medya kaynağı oluşturma
ExoPlayer, diğer MediaSource
örneklerini değiştirmek ve derlemek için birden fazla MediaSource
uygulaması sağlar. Bunlar en çok, birden fazla özelleştirmenin birleştirilmesinin gerektiği ve daha basit kurulum yollarının hiçbirinin yeterli olmadığı durumlarda yararlıdır.
ClippingMediaSource
: Medyayı belirtilen bir zaman damgası aralığına göre kırpmanıza olanak tanır. Tek değişiklik bu ise bunun yerineMediaItem.ClippingConfiguration
kullanmayı tercih edin.FilteringMediaSource
: Kullanılabilir parçaları belirtilen türlere göre filtreler (ör. hem ses hem de video içeren bir dosyadaki video parçasını gösterme). Tek değişiklik bu ise bunun yerine parça seçim parametrelerini kullanmanız önerilir.MergingMediaSource
: Birden fazla medya kaynağını birleştirerek paralel olarak oynatır. Hemen hemen tüm durumlarda, tüm kaynakların aynı anda başlayıp bitmesini sağlamak içinadjustPeriodTimeOffsets
veclipDurations
doğru olarak ayarlanmış şekilde oluşturucuyu çağırmanız önerilir. Bu değişiklik, harici olarak yüklenen altyazılar eklemek için yapılıyorsa bunun yerineMediaItem.SubtitleConfiguration
kullanılması tercih edilir.ConcatenatingMediaSource2
: Ardışık olarak oynatılmak üzere birden fazla medya kaynağını birleştirir. Kullanıcı tarafından görülebilen medya yapısı tek birTimeline.Window
gösterir. Yani tek bir öğe gibi görünür. Bu değişiklik, tek bir öğe gibi görünmemesi gereken birden fazla öğeyi oynatmak için yapılıyorsa bunun yerinePlayer.addMediaItem
gibi playlist API yöntemlerini kullanmak tercih edilir.SilenceMediaSource
: Boşlukları doldurmak için belirli bir süre boyunca sessizlik oluşturur.AdsMediaSource
: Bir medya kaynağını istemci tarafı reklam ekleme özellikleriyle genişletir. Ayrıntılar için reklam ekleme kılavuzuna bakın.ServerSideAdInsertionMediaSource
: Sunucu tarafı reklam ekleme özellikleriyle bir medya kaynağını genişletir. Ayrıntılar için reklam ekleme kılavuzuna bakın.