Medya kaynakları

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:

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 yerine MediaItem.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 kurucuyu adjustPeriodTimeOffsets ve clipDurations değerine ayarlanmış olarak çağırmanız önerilir. Bu değişiklik, yandan yüklenen altyazılar eklemek için yapıldıysa bunun yerine MediaItem.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 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 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.