Progresywne

Strumienie w poniższych formatach kontenerów mogą być odtwarzane bezpośrednio przez ExoPlayer. Zawarte w nim treści muszą być też obsługiwane w formatach przykładowych audio i wideo (szczegóły znajdziesz w sekcji przykładowe formaty).

Format kontenera Obsługiwane Komentarze
MP4 TAK
M4A TAK
FMP4 TAK
WebM TAK
Matroška TAK
MP3 TAK Niektóre transmisje można wyszukiwać tylko ze stałą szybkością transmisji bitów**
Ogg TAK Zawiera Vorbis, Opus i FLAC
WAV TAK
MPEG-TS TAK
MPEG-PS TAK
FLV TAK Nie można przewijać*
ADTS (AAC) TAK Dostępne tylko przy przewijaniu ze stałą szybkością transmisji**
FLAC TAK Korzystanie z biblioteki FLAC lub wyodrębniania plików FLAC w bibliotece ExoPlayer***
AMR TAK Dostępne tylko przy przewijaniu ze stałą szybkością transmisji**
Zdjęcie ruchome JPEG TAK Wyodrębniana jest tylko treść w formacie MP4

* Wyszukiwanie nie jest obsługiwane, ponieważ kontener nie zawiera metadanych (np. przykładowego indeksu), które umożliwiają odtwarzaczowi multimediów skuteczne wykonanie wyszukiwania. Jeśli wyszukiwanie jest wymagane, zalecamy użycie bardziej odpowiedniego formatu kontenera.

** Te moduły wyodrębniania danych mają flagi FLAG_ENABLE_CONSTANT_BITRATE_SEEKING, które umożliwiają przybliżone przewijanie z założeniem stałej szybkości transmisji bitów. Ta funkcja jest domyślnie wyłączona. Najprostszym sposobem włączenia tej funkcji we wszystkich modułach wyodrębniania, które ją obsługują, jest użycie DefaultExtractorsFactory.setConstantBitrateSeekingEnabled zgodnie z opisem tutaj.

*** Ekstraktor FLAC generuje nieprzetworzony dźwięk, który może być obsługiwany przez platformę na wszystkich poziomach interfejsu API. Ekstraktor plików FLAC z biblioteki ExoPlayer generuje klatki audio FLAC, więc korzysta z dekodera plików FLAC (np. dekodera MediaCodec, który obsługuje pliki FLAC (wymagane w przypadku interfejsu API na poziomie 27), lub biblioteki FFmpeg z włączonym formatem FLAC). Jeśli aplikacja została skompilowana przy użyciu biblioteki FLAC, DefaultExtractorsFactory używa modułu wyodrębniania rozszerzeń. W przeciwnym razie używa programu wyodrębniania biblioteki ExoPlayer.

Korzystanie z elementu MediaItem

Aby odtwarzać strumień progresywny, utwórz obiekt 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 dostosowania, utwórz ProgressiveMediaSource i bezpośrednio do odtwarzacza 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 oferuje wiele sposobów dostosowania odtwarzania do potrzeb aplikacji. Przykłady znajdziesz na stronie Dostosowywanie.