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
:
DashMediaSource
w przypadku DASH.SsMediaSource
w przypadku funkcji SmoothStreaming.HlsMediaSource
dla HLS.ProgressiveMediaSource
w przypadku zwykłych plików multimedialnych.RtspMediaSource
dla protokołu RTSP.
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 przezadjustPeriodTimeOffsets
iclipDurations
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 jedenTimeline.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 jakPlayer.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.