Strumienie w tych formatach kontenera można odtwarzać bezpośrednio w ExoPlayerze. Muszą być też obsługiwane dołączone do tego formaty dźwiękowe i wideo (patrz Przykładowe formaty). Informacje o obsługiwanych formatach i kontenerach obrazów znajdziesz w artykule Obrazy.
Format kontenera | Obsługiwane | Komentarze |
---|---|---|
MP4 | TAK | |
M4A | TAK | |
FMP4 | TAK | |
WebM | TAK | |
Matroska | TAK | |
MP3 | TAK | Niektóre strumienie można przeskakiwać tylko za pomocą przeskakiwania z stałym bitratem** |
Ogg | TAK | Zawiera Vorbis, Opus i FLAC |
WAV | TAK | |
MPEG-TS | TAK | |
MPEG-PS | TAK | |
FLV | TAK | Niemożliwość przewijania* |
ADTS (AAC) | TAK | Dostępna tylko do przewijania przy stałej szybkości transmisji bitów** |
FLAC | TAK | Korzystanie z biblioteki FLAC lub narzędzia do wyodrębniania FLAC w bibliotece ExoPlayer*** |
AMR | TAK | Możliwość przesunięcia tylko przy użyciu funkcji przesunięcia przy stałej szybkości transmisji bitów** |
* Przewijanie nie jest obsługiwane, ponieważ kontener nie udostępnia metadanych (np. indeksu próbek), które pozwoliłyby odtwarzaczowi skutecznie przewinąć film. Jeśli wymagane jest wyszukiwanie, zalecamy użycie bardziej odpowiedniego formatu kontenera.
** Te moduły wyodrębniania danych mają FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
flagi dla
umożliwiające przybliżone przewijanie z założeniem o stałej szybkości transmisji bitów. Ten
funkcja nie jest domyślnie włączona. Najprostszy sposób, aby to włączyć
dla wszystkich modułów wyodrębniania, które go obsługują, jest użycie
DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
, zgodnie z opisem
tutaj.
*** Wyodrębnianie biblioteki FLAC generuje nieprzetworzony dźwięk, który może być obsługiwany
na wszystkich poziomach
interfejsu API. Dane wyjściowe biblioteki ExoPlayer wyodrębniania FLAC
ramki audio FLAC i wymaga dekodera FLAC (np. MediaCodec
dekoder obsługujący format FLAC (wymagany od interfejsu API poziomu 27) lub
bibliotekę FFmpeg z włączonym FLAC). W elemencie DefaultExtractorsFactory
używany jest protokół
wyodrębniania rozszerzeń, jeśli aplikacja została skompilowana za pomocą biblioteki FLAC.
W przeciwnym razie używany jest ekstraktor biblioteki ExoPlayer.
Korzystanie z elementu MediaItem
Aby odtwarzać strumień progresywny, utwórz MediaItem
z identyfikatorem URI multimediów i przekaż
i wysłać je do odtwarzacza.
Kotlin
// Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(progressiveUri)) // Prepare the player. player.prepare()
Java
// Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(progressiveUri)); // Prepare the player. player.prepare();
Korzystanie z ProgressiveMediaSource
Aby uzyskać więcej opcji dostosowywania, możesz utworzyć ProgressiveMediaSource
i przekazać go bezpośrednio odtwarzaczowi zamiast MediaItem
.
Kotlin
// Create a data source factory. val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory() // Create a progressive media source pointing to a stream uri. val mediaSource: MediaSource = ProgressiveMediaSource.Factory(dataSourceFactory) .createMediaSource(MediaItem.fromUri(progressiveUri)) // Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media source to be played. player.setMediaSource(mediaSource) // Prepare the player. player.prepare()
Java
// Create a data source factory. DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory(); // Create a progressive media source pointing to a stream uri. MediaSource mediaSource = new ProgressiveMediaSource.Factory(dataSourceFactory) .createMediaSource(MediaItem.fromUri(progressiveUri)); // Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media source to be played. player.setMediaSource(mediaSource); // Prepare the player. player.prepare();
Dostosowywanie odtwarzania
ExoPlayer daje wiele możliwości dostosowania odtwarzania do do potrzeb Twojej aplikacji. Przykłady znajdziesz na stronie personalizacji.