Źródła multimediów

W odtwarzaczu ExoPlayer każdy plik multimedialny jest reprezentowany przez element MediaItem. Jednak wewnętrznie odtwarzacz potrzebuje MediaSource instancji, aby odtworzyć treści. odtwarzacz tworzy je na podstawie elementów multimedialnych za pomocą interfejsu MediaSource.Factory.

Domyślnie odtwarzacz używa interfejsu DefaultMediaSourceFactory, który może tworzyć następujące wystąpienia treści MediaSource:

DefaultMediaSourceFactory może też tworzyć bardziej złożone źródła multimediów w zależności od tego, na właściwości odpowiednich elementów multimedialnych. Więcej informacji znajdziesz szczegóły dotyczące Strona elementów multimedialnych.

W przypadku aplikacji, które wymagają konfiguracji źródła multimediów, które nie są obsługiwane przez domyślnej konfiguracji odtwarzacza, jest kilka opcji i personalizacji reklam.

Dostosowywanie tworzenia źródeł multimediów

Podczas tworzenia odtwarzacza można wstrzyknąć MediaSource.Factory. Przykład: jeśli aplikacja chce wstawić reklamy i używać CacheDataSource.Factory do obsługi buforowanie, można skonfigurować instancję DefaultMediaSourceFactory tak, te wymagania i są wstawiane podczas tworzenia odtwarzacza:

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

Dokument JavaDoc: DefaultMediaSourceFactory zawiera bardziej szczegółowe informacje o dostępnych opcjach.

Możesz też wstrzyknąć niestandardową implementację MediaSource.Factory, na przykład przykład do tworzenia niestandardowego typu źródła multimediów. System Funkcja createMediaSource(MediaItem) zostanie wywołana w celu utworzenia źródła multimediów dla każdego element multimedialny, który jest dodano do playlisty.

Interfejs API playlisty oparty na źródle multimediów

Interfejs ExoPlayer definiuje dodatkowe metody akceptowania playlist. źródeł multimediów, a nie elementów multimedialnych. Umożliwia to ominięcie wewnętrznego interfejsu MediaSource.Factory odtwarzacza i przekazywać wystąpienia źródła multimediów do bezpośrednio:

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

Zaawansowana kompozycja źródła multimediów

ExoPlayer udostępnia wiele implementacji MediaSource do modyfikowania i tworzenia innych instancji MediaSource. Przydają się one najbardziej, gdy dostosowania muszą być łączone, a żaden z prostszych ścieżek wystarczająca.

  • ClippingMediaSource: umożliwia przycinanie multimediów do określonego zakresu sygnatur czasowych. Jeśli jest to jedyna zmiana, lepiej jest użyć MediaItem.ClippingConfiguration.
  • FilteringMediaSource: filtruje dostępne ścieżki do określonych typów, w przypadku: na przykład przez ujawnienie ścieżki wideo z pliku, który zawiera zarówno dźwięk, i wideo. Jeśli jest to jedyna zmiana, lepiej jest użyć parametrów wyboru ścieżki.
  • MergingMediaSource: scala wiele źródeł multimediów, aby były odtwarzane równolegle. W w prawie wszystkich przypadkach zaleca się wywołanie konstruktora przez adjustPeriodTimeOffsets i clipDurations mają wartość Prawda, aby zapewnić wszystkie źródła zaczynają się i kończą w tym samym czasie. Jeśli ta zmiana zostanie wprowadzona, aby dodać jako napisów wczytywane z innego źródła, lepiej użyć MediaItem.SubtitleConfiguration.
  • ConcatenatingMediaSource2: scala wiele źródeł multimediów do odtworzenia jeden po drugim. Struktura multimediów widoczna dla użytkowników udostępnia jeden Timeline.Window, co oznacza, że wygląda jak pojedynczy produkt. Jeśli wprowadzanie zmian w celu odtworzenia wielu elementów, które nie powinny wyglądać tak, lepiej użyć metod interfejsu API playlist, takich jak Player.addMediaItem.
  • SilenceMediaSource: generuje ciszę przez określony czas, który wynosi co pomaga wypełnić luki.
  • AdsMediaSource: rozszerza źródło multimediów o wstawianie reklam po stronie klienta. funkcje zabezpieczeń. Szczegółowe informacje znajdziesz w przewodniku po wstawianiu reklam.
  • ServerSideAdInsertionMediaSource: rozszerza źródło multimediów o reklamę po stronie serwera. funkcji wstawiania reklam. Szczegółowe informacje znajdziesz w przewodniku po wstawianiu reklam.