Streaming dalam format penampung berikut dapat diputar langsung oleh ExoPlayer. Format sampel audio dan video yang disertakan juga harus didukung (lihat bagian Format sampel untuk mengetahui detailnya). Untuk dukungan format dan penampung gambar, lihat Gambar.
| Format penampung | Didukung | Komentar |
|---|---|---|
| MP4 | YA | |
| M4A | YA | |
| FMP4 | YA | |
| WebM | YA | |
| Matroska | YA | |
| MP3 | YA | Beberapa streaming hanya dapat dicari menggunakan pencarian bitrate konstan** |
| Ogg | YA | Berisi Vorbis, Opus, dan FLAC |
| WAV | YA | |
| MPEG-TS | YA | |
| MPEG-PS | YA | |
| FLV | YA | Tidak dapat dicari* |
| ADTS (AAC) | YA | Hanya dapat dicari menggunakan pencarian bitrate konstan** |
| FLAC | YA | Menggunakan library FLAC atau ekstraktor FLAC di library ExoPlayer*** |
| AMR | YA | Hanya dapat dicari menggunakan pencarian bitrate konstan** |
* Pencarian tidak didukung karena penampung tidak menyediakan metadata (misalnya, indeks sampel) untuk memungkinkan pemutar media melakukan pencarian secara efisien. Jika pencarian diperlukan, sebaiknya gunakan format penampung yang lebih sesuai.
** Ekstraktor ini memiliki tanda FLAG_ENABLE_CONSTANT_BITRATE_SEEKING untuk
mengaktifkan pencarian perkiraan menggunakan asumsi bitrate konstan. Fungsi
ini tidak diaktifkan secara default. Cara paling sederhana untuk mengaktifkan fungsi ini bagi semua ekstraktor yang mendukungnya adalah dengan menggunakan
DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, seperti yang dijelaskan
di sini.
*** Ekstraktor library FLAC menghasilkan output audio mentah, yang dapat ditangani oleh framework di semua level API. Output ekstraktor FLAC library ExoPlayer adalah
frame audio FLAC sehingga bergantung pada adanya decoder FLAC (misalnya, decoder MediaCodec
yang menangani FLAC (diperlukan dari level API 27), atau
library FFmpeg dengan FLAC diaktifkan). DefaultExtractorsFactory menggunakan
pengekstrak ekstensi jika aplikasi dibangun dengan FLAC library.
Jika tidak, ia akan menggunakan ekstraktor library ExoPlayer.
Menggunakan MediaItem
Untuk memutar streaming progresif, buat MediaItem dengan URI media dan teruskan
ke pemutar.
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();
Menggunakan ProgressiveMediaSource
Untuk opsi penyesuaian lainnya, Anda dapat membuat ProgressiveMediaSource dan
meneruskannya langsung ke pemutar, bukan 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();
Menyesuaikan pemutaran
ExoPlayer menyediakan beberapa cara bagi Anda untuk menyesuaikan pengalaman pemutaran dengan kebutuhan aplikasi Anda. Lihat Halaman penyesuaian untuk mendapatkan contoh.