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.