Progresywne

ExoPlayer może bezpośrednio odtwarzać strumienie w tych formatach kontenerów: Obsługiwane muszą być też formaty próbek audio i wideo (szczegółowe informacje znajdziesz w sekcji Formaty próbek). Informacje o obsługiwanych kontenerach i formatach obrazów znajdziesz w sekcji Obrazy.

Format kontenera Obsługiwane Komentarze
MP4 TAK
M4A TAK
FMP4 TAK
WebM TAK
Matroska TAK
MP3 TAK Niektóre strumienie można przewijać tylko przy użyciu przewijania ze stałą szybkością transmisji**
Ogg TAK zawierające formaty Vorbis, Opus i FLAC;
WAV TAK
MPEG-TS TAK
MPEG-PS TAK
FLV TAK Nie można przewijać*
ADTS (AAC) TAK Można przewijać tylko przy użyciu przewijania ze stałą szybkością transmisji bitów**
FLAC TAK korzystanie z biblioteki FLAC lub ekstraktora FLAC w bibliotece ExoPlayer***;
AMR TAK Można przewijać tylko przy użyciu przewijania ze stałą szybkością transmisji bitów**

* Przewijanie jest niedostępne, ponieważ kontener nie zawiera metadanych (np. indeksu próbek), które umożliwiają odtwarzaczowi multimediów wydajne przewijanie. Jeśli wymagane jest wyszukiwanie, zalecamy użycie bardziej odpowiedniego formatu kontenera.

** Te ekstraktory mają flagi FLAG_ENABLE_CONSTANT_BITRATE_SEEKING umożliwiające przybliżone wyszukiwanie przy założeniu stałej szybkości transmisji. Ta funkcja nie jest domyślnie włączona. Najprostszym sposobem włączenia tej funkcji dla wszystkich ekstraktorów, które ją obsługują, jest użycie DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, jak opisano tutaj.

*** Ekstraktor biblioteki FLAC generuje surowe dane audio, które mogą być obsługiwane przez platformę na wszystkich poziomach interfejsu API. Ekstraktor FLAC biblioteki ExoPlayer generuje ramki audio FLAC, więc wymaga dekodera FLAC (np. dekodera MediaCodec obsługującego FLAC, który jest wymagany od poziomu interfejsu API 27, lub biblioteki FFmpeg z włączoną obsługą FLAC). DefaultExtractorsFactory korzysta z ekstraktora rozszerzeń, jeśli aplikacja została utworzona za pomocą biblioteki FLAC. W przeciwnym razie używa ekstraktora biblioteki ExoPlayer.

Używanie elementu MediaItem

Aby odtworzyć strumień progresywny, utwórz MediaItem z identyfikatorem URI multimediów i przekaż go 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ć obiekt ProgressiveMediaSource i przekazać go bezpośrednio do odtwarzacza zamiast obiektu 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 udostępnia wiele sposobów dostosowywania odtwarzania do potrzeb aplikacji. Przykłady znajdziesz na stronie Dostosowywanie.