Progresif

Streaming dalam format penampung berikut dapat diputar langsung oleh ExoPlayer. Format sampel audio dan video yang ada juga harus didukung (lihat Contoh format 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 kecepatan bit 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 kecepatan bit konstan**
FLAC YA Menggunakan library FLAC atau ekstraktor FLAC di library ExoPlayer***
AMR YA Hanya dapat dicari menggunakan pencarian kecepatan bit konstan**

* Pencarian tidak didukung karena penampung tidak menyediakan metadata (misalnya, indeks sampel) untuk memungkinkan pemutar media melakukan pencarian dengan cara yang efisien. Jika pencarian diperlukan, sebaiknya gunakan format penampung yang lebih sesuai.

** Ekstraktor ini memiliki flag FLAG_ENABLE_CONSTANT_BITRATE_SEEKING untuk mengaktifkan pencarian perkiraan menggunakan asumsi kecepatan bit konstan. Fungsi ini tidak diaktifkan secara default. Cara paling sederhana untuk memungkinkan fungsi untuk semua ekstraktor yang mendukungnya adalah menggunakan DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, seperti yang dijelaskan di sini.

*** Ekstraktor library FLAC menghasilkan audio mentah, yang dapat ditangani oleh framework di semua level API. Ekstraktor FLAC library ExoPlayer menghasilkan frame audio FLAC sehingga mengandalkan dekoder FLAC (misalnya, dekoder MediaCodec yang menangani FLAC (diperlukan dari API level 27), atau library FFmpeg dengan FLAC diaktifkan). DefaultExtractorsFactory menggunakan ekstraktor ekstensi jika aplikasi dibuat dengan library FLAC. Jika tidak, aplikasi 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. Lihat halaman Penyesuaian untuk mengetahui contohnya.