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. İlgili içeriği oluşturmak için kullanılan oynatıcı, bunları bir MediaSource.Factory kullanarak medya öğelerinden oluşturur.

Oynatıcı varsayılan olarak bir DefaultMediaSourceFactory kullanır ve böylece aşağıdaki içerik MediaSource uygulamalarının örnekleri:

DefaultMediaSourceFactory, cihaza bağlı olarak daha karmaşık medya kaynakları da oluşturabilir özelliklerini açar. Bu konu hakkında daha fazla bilgi ilgili ayrıntıyı Medya öğeleri sayfası.

için birkaç seçenek vardır. birçok seçenek var.

Medya kaynağı oluşturmayı özelleştirme

Oynatıcıyı oluştururken MediaSource.Factory yerleştirilebilir. Örneğin, Bir uygulama reklam eklemek ve CacheDataSource.Factory uygulamasını desteklemek için önbellek olarak sunuluyorsa DefaultMediaSourceFactory öğesinin bir örneği eşleşecek şekilde yapılandırılabilir şu şartlar geçerlidir ve oynatıcı üretimi sırasında eklenir:

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();

İlgili içeriği oluşturmak için kullanılan DefaultMediaSourceFactory JavaDoc 'nda mevcut seçenekler daha ayrıntılı olarak açıklanmaktadır.

Özel bir MediaSource.Factory uygulaması eklemek de mümkündür. örneğini kullanın. Fabrikanın Her biri için bir medya kaynağı oluşturmak üzere createMediaSource(MediaItem) çağrılır şu medya öğesi: oynatma listesine eklenir.

Medya kaynağına dayalı oynatma listesi API'si

ExoPlayer arayüzü, kabul edilen ek oynatma listesi yöntemlerini tanımlar medya kaynaklarını arayın. Bu da oynatıcının dahili MediaSource.Factory ve medya kaynağı örneklerini oynatıcıya doğrudan ulaşabilirsiniz:

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, değişiklik yapmak ve oluşturmak için birden fazla MediaSource uygulaması sağlar MediaSource örneği daha. Bunlar en çok, birden fazla özelleştirmelerin birleştirilmesi gerekir ve basit kurulum yollarının hiçbiri yeterli olacaktır.

  • ClippingMediaSource: Belirli bir zaman damgası aralığına medya klibi oluşturulmasına olanak tanır. Tek değişiklik buysa, başka bir değişiklik yapmak için Bunun yerine MediaItem.ClippingConfiguration.
  • FilteringMediaSource: Kullanılabilir kanalları, şunun için belirtilen türlere göre filtreler: Örneğin, video parçasının her iki sesi de içeren bir dosyadan ve video. Tek değişiklik buysa, başka bir değişiklik yapmak için seçim parametrelerini izlemeyi deneyin.
  • MergingMediaSource: Paralel olarak oynatmak için birden fazla medya kaynağını birleştirir. İçinde her durumda, oluşturucunun çağrılması için Tüm özelliklerin geçerli olduğundan emin olmak için adjustPeriodTimeOffsets ve clipDurations doğru değerine ayarlandı aynı anda başlayıp bitiyor. Bu değişiklik altyazıların başka bir cihazdan yüklenmesi tercih edilir. Bunun yerine MediaItem.SubtitleConfiguration.
  • ConcatenatingMediaSource2: Oynatmak için birden fazla medya kaynağını birleştirir art arda. Kullanıcının görebildiği medya yapısı, tek bir Timeline.Window: Yani tek bir öğe gibi görünür. Bu gibi görünmemesi gereken birden çok öğeyi oynatmak için bir oynatma listesi oluşturmak isterseniz, aşağıdaki gibi playlist API yöntemlerini Bunun yerine Player.addMediaItem.
  • SilenceMediaSource: Şu kadar süre boyunca sessizlik oluşturur: yararlı olabilir.
  • AdsMediaSource: İstemci taraflı reklam eklemeyle bir medya kaynağını genişletir özellikler. Ayrıntılar için reklam ekleme kılavuzuna bakın.
  • ServerSideAdInsertionMediaSource: Sunucu tarafı reklamla bir medya kaynağını genişletir özellikleri ekleyin. Ayrıntılar için reklam ekleme kılavuzuna bakın.