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 örnek gerekir. Oynatıcı, bunları MediaSource.Factory kullanarak medya öğelerinden oluşturur.
Oynatıcı varsayılan olarak DefaultMediaSourceFactory kullanır. Bu da aşağıdaki içerik MediaSource uygulamalarının örneklerini oluşturabilir:
DashMediaSourceiçin DASH.SsMediaSourceSmoothStreaming için.HlsMediaSourceHLS için.ProgressiveMediaSourcenormal medya dosyaları için.- 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ı olarak açıklanmaktadı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 eklenebilir. Ö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 oynatıcı oluşturulurken yerleştirilebilir:
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();
DefaultMediaSourceFactory JavaDoc, mevcut seçenekleri daha ayrıntılı olarak açıklar.
Örneğin, özel bir medya kaynağı türü oluşturmayı desteklemek için özel bir MediaSource.Factory uygulaması da yerleştirebilirsiniz. Fabrika, createMediaSource(MediaItem) her biri için bir medya kaynağı oluşturmak üzere çağrılacak. Şarkı listesine eklenen medya öğesi.
Medya kaynağına dayalı oynatma listesi API'si
ExoPlayer arayüzü, medya öğeleri yerine medya kaynaklarını kabul eden ek oynatma listesi yöntemlerini tanımlar. Bu sayede, oynatıcının dahili MediaSource.Factory atlanabilir ve medya kaynağı örnekleri doğrudan oynatıcıya aktarılabilir:
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ğı kompozisyonu
ExoPlayer, diğer MediaSource örneklerini değiştirmek ve oluşturmak için birden fazla MediaSource uygulama sağlar. Bu yöntemler, birden fazla özelleştirmenin birleştirilmesi gerektiği ve daha basit kurulum yollarının yeterli olmadığı durumlarda en kullanışlı olanlardır.
ClippingMediaSource: Medyanın belirtilen zaman damgası aralığında kırpılmasına olanak tanır. Tek değişiklik buysa bunun yerineMediaItem.ClippingConfigurationkullanılması tercih edilir.FilteringMediaSource: Kullanılabilir parçaları belirtilen türlere göre filtreler. Örneğin, hem ses hem de video içeren bir dosyadan yalnızca video parçasını gösterir. Tek değişiklik buysa bunun yerine parça seçimi parametrelerini kullanmanız tercih edilir.MergingMediaSource: Birden fazla medya kaynağını birleştirerek paralel olarak oynatır. Neredeyse tüm durumlarda, tüm kaynakların aynı anda başlayıp aynı anda bitmesini sağlamak için oluşturucuyuadjustPeriodTimeOffsetsveclipDurationsdeğerleri doğru olacak şekilde çağırmanız önerilir. Bu değişiklik, yan yüklenen altyazıları eklemek için yapılıyorsaMediaItem.SubtitleConfigurationkullanılması tercih edilir.ConcatenatingMediaSource2: Birden fazla medya kaynağını birleştirerek art arda oynatır. Kullanıcı tarafından görülebilen medya yapısı tek birTimeline.Windowgö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.addMediaItemgibi oynatma listesi API yöntemlerinin kullanılması tercih edilir.SilenceMediaSource: Boşlukları doldurmak için kullanışlı olan, belirtilen süre boyunca sessizlik oluşturur.AdsMediaSource: Bir medya kaynağını istemci taraflı reklam ekleme özellikleriyle genişletir. Ayrıntılar için reklam ekleme kılavuzuna bakın.ServerSideAdInsertionMediaSource: Bir medya kaynağını sunucu taraflı reklam ekleme özellikleriyle genişletir. Ayrıntılar için reklam ekleme kılavuzuna bakın.