Medya kaynakları

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:

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 yerine MediaItem.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çin adjustPeriodTimeOffsets ve clipDurations 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 yerine MediaItem.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 bir Timeline.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 yerine Player.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.