Medya kaynakları

ExoPlayer'da her medya parçası bir MediaItem ile temsil edilir. Ancak dahili olarak oynatıcının içeriği oynatmak için MediaSource örneğe ihtiyacı vardır. Oynatıcı, MediaSource.Factory kullanarak medya öğelerinden bunları oluşturur.

Oynatıcı varsayılan olarak DefaultMediaSourceFactory kullanır. Bu, aşağıdaki içerik MediaSource uygulamalarının örneklerini oluşturabilir:

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 bir MediaSource.Factory eklenebilir. Örneğin, bir uygulama reklam eklemek ve önbelleğe almayı desteklemek için CacheDataSource.Factory kullanmak istiyorsa 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();

DefaultMediaSourceFactory JavaDoc, mevcut seçenekleri daha ayrıntılı olarak açıklar.

Özel bir MediaSource.Factory uygulaması eklemek de mümkündür. Örneğin, özel bir medya kaynağı türü oluşturmayı desteklemek için. Oynatma listesine eklenen her medya öğesi için bir medya kaynağı oluşturmak üzere fabrikanın createMediaSource(MediaItem) yöntemi çağrılır.

Medya kaynağı tabanlı 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 öğesini atlayıp 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ğı kompozisyonu

ExoPlayer, diğer MediaSource örneklerini değiştirmek ve oluşturmak için birden fazla MediaSource uygulaması sunar. Bu yöntemler, birden fazla özelleştirmenin birleştirilmesi gerektiğinde ve daha basit kurulum yollarının yeterli olmadığı durumlarda en kullanışlı yöntemlerdir.

  • ClippingMediaSource: Medyanın belirli bir zaman damgası aralığına kırpılmasına olanak tanır. Tek değişiklik buysa bunun yerine MediaItem.ClippingConfiguration kullanılması tercih edilir.
  • FilteringMediaSource: Mevcut 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çim parametrelerini kullanmak daha iyidir.
  • 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 bitmesini sağlamak için adjustPeriodTimeOffsets ve clipDurations değerleri doğru olarak ayarlanmış şekilde oluşturucuyu çağırmanız önerilir. Bu değişiklik, yan yüklemeli altyazı eklemek için yapılıyorsa bunun yerine MediaItem.SubtitleConfiguration kullanılması tercih edilir.
  • ConcatenatingMediaSource2: Birden fazla medya kaynağını birleştirerek sırayla oynatır. Kullanıcı tarafından görülebilen medya yapısı tek bir Timeline.Window gösterir. Bu, tek bir öğe gibi göründüğü anlamına gelir. Bu değişiklik, tek bir öğe gibi görünmemesi gereken birden fazla öğeyi oynatmak için yapılıyorsa bunun yerine Player.addMediaItem gibi oynatma listesi API'si yöntemlerini kullanmanız tercih edilir.
  • SilenceMediaSource: Boşlukları doldurmak için kullanışlı olan, belirtilen süre boyunca sessizlik oluşturur.
  • AdsMediaSource: İstemci tarafı reklam ekleme özellikleriyle bir medya kaynağını 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.