Progresywne

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.