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:
DashMediaSourcew przypadku DASH.SsMediaSourcew przypadku funkcji SmoothStreaming.HlsMediaSourcedla HLS.ProgressiveMediaSourcew przypadku zwykłych plików multimedialnych.RtspMediaSourcedla 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 przezadjustPeriodTimeOffsetsiclipDurationsmają 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.