ExoPlayer'da her medya parçası bir MediaItem
ile temsil edilir. Ancak içeriği oynatmak için dahili olarak oynatıcının MediaSource
örneğe ihtiyacı vardır. Oynatıcı, bunları bir MediaSource.Factory
kullanarak medya öğelerinden oluşturur.
Oynatıcı varsayılan olarak bir DefaultMediaSourceFactory
kullanır. Bu sayede, aşağıdaki içerik MediaSource
uygulamalarının örneklerini oluşturabilir:
- 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, Medya öğeleri sayfasında daha ayrıntılı bir şekilde açıklanmaktadır.
Oynatıcının varsayılan yapılandırmasının desteklemediği medya kaynağı ayarlarına ihtiyaç duyan uygulamalar için birkaç özelleştirme seçeneği vardır.
Medya kaynağı oluşturma işlemini özelleştirme
Oynatıcıyı oluştururken MediaSource.Factory
eklenebilir. Örneğin, bir uygulama reklam eklemek ve önbelleğe almayı desteklemek için bir CacheDataSource.Factory
kullanmak isterse DefaultMediaSourceFactory
örneği bu gereksinimleri karşılayacak şekilde yapılandırılabilir ve oynatıcı oluşturma sırasında 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ı şekilde açıklanmıştır.
Örneğin, özel bir medya kaynağı türünün oluşturulmasını desteklemek için özel bir MediaSource.Factory
uygulaması eklemek de mümkündür. Oynatma listesine eklenen her medya öğesi için bir medya kaynağı oluşturmak üzere fabrikanın createMediaSource(MediaItem)
işlevi çağrılır.
Medya kaynağına dayalı oynatma listesi API'sı
ExoPlayer
arayüzü, medya öğeleri yerine medya kaynaklarını kabul eden ek oynatma listesi yöntemlerini tanımlar. Bu, oynatıcının dahili MediaSource.Factory
değerini atlamayı ve medya kaynağı örneklerini oynatıcıya doğrudan iletmeyi mümkün kılar:
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ğı bileşimi
ExoPlayer, diğer MediaSource
örneklerini değiştirmek ve oluşturmak için birden fazla MediaSource
uygulaması sağlar. Bunlar en çok, birden çok özelleştirmenin birleştirilmesinin gerektiği ve daha basit kurulum yollarının hiçbirinin yeterli olmadığı durumlarda yararlıdır.
ClippingMediaSource
: Medyayı belirli bir zaman damgası aralığına göre kırpmaya olanak tanır. Tek değişiklik buysa bunun yerineMediaItem.ClippingConfiguration
kullanılması tercih edilir.FilteringMediaSource
: Kullanılabilir parçaları belirtilen türlere göre filtreler. Örneğin, sadece video parçası hem ses hem de video içeren bir dosyadan gösterilir. Tek değişiklik buysa bunun yerine kanal seçimi parametrelerinin kullanılması tercih edilir.MergingMediaSource
: Paralel olarak oynatmak için birden çok medya kaynağını birleştirir. Neredeyse her durumda, tüm kaynakların aynı anda başlayıp bitmesini sağlamak için kurucuyuadjustPeriodTimeOffsets
veclipDurations
değerine ayarlanmış olarak çağırmanız önerilir. Bu değişiklik, yandan yüklenen altyazılar eklemek için yapıldıysa bunun yerineMediaItem.SubtitleConfiguration
kullanılması tercih edilir.ConcatenatingMediaSource2
: Art arda oynatmak için birden çok 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 oynatacak şekilde yapılıyorsa bunun yerine,Player.addMediaItem
gibi playlist API yöntemlerini kullanmanız tercih edilir.SilenceMediaSource
: Boşlukları doldurmak için faydalı olan belirli bir süre boyunca sessizlik oluşturur.AdsMediaSource
: İstemci tarafı reklam ekleme özelliklerine sahip bir medya kaynağını genişletir. Ayrıntılar için reklam ekleme kılavuzuna bakın.ServerSideAdInsertionMediaSource
: Sunucu tarafı reklam ekleme özelliklerine sahip bir medya kaynağını genişletir. Ayrıntılar için reklam ekleme kılavuzuna bakın.