Saat menentukan format yang didukung ExoPlayer, penting untuk diperhatikan bahwa "format media" ditentukan di beberapa tingkat. Dari tingkat terendah hingga tertinggi, berikut adalah:
- Format setiap sampel media (seperti frame video atau frame audio). Ini adalah contoh format. Perhatikan bahwa file video standar akan berisi media dalam minimal dua format sampel; satu untuk video (misalnya, H.264) dan satu untuk audio (misalnya, AAC).
- Format penampung yang menyimpan sampel media dan metadata terkait. Ini adalah format penampung. File media memiliki satu format penampung (misalnya, MP4), yang biasanya ditunjukkan oleh ekstensi file. Perhatikan bahwa untuk beberapa format khusus audio (misalnya, MP3), format sampel dan penampung mungkin sama.
- Teknologi streaming adaptif seperti DASH, SmoothStreaming, dan HLS. Format ini bukan format media, tetapi Anda tetap perlu menentukan tingkat dukungan yang disediakan ExoPlayer.
Bagian berikut menentukan dukungan ExoPlayer di setiap level, dari tertinggi hingga terendah. Dua bagian terakhir menjelaskan dukungan untuk format subtitel mandiri dan pemutaran video HDR.
Streaming adaptif
DASH
ExoPlayer mendukung DASH dengan beberapa format penampung. Streaming media harus
di-demux, yang berarti video, audio, dan teks harus ditentukan dalam elemen
AdaptationSet
yang berbeda dalam manifes DASH (CEA-608 adalah pengecualian seperti
yang dijelaskan dalam tabel di bawah). Format sampel audio dan video yang disertakan juga harus
didukung (lihat
bagian format sampel untuk mengetahui detailnya).
Fitur | Didukung | Komentar |
---|---|---|
Container | ||
FMP4 | YA | Khusus streaming yang didemux |
WebM | YA | Khusus streaming yang didemux |
Matroska | YA | Khusus streaming yang didemux |
MPEG-TS | TIDAK | Tidak ada dukungan yang direncanakan |
Teks tertutup/subtitel | ||
TTML | YA | Mentah, atau disematkan dalam FMP4 sesuai dengan ISO/IEC 14496-30 |
WebVTT | YA | Mentah, atau disematkan dalam FMP4 sesuai dengan ISO/IEC 14496-30 |
CEA-608 | YA | Disematkan dalam FMP4 saat diberi sinyal menggunakan deskripsi Aksesibilitas SCTE |
CEA-708 | YA | Disematkan dalam FMP4 saat diberi sinyal menggunakan deskripsi Aksesibilitas SCTE |
Metadata | ||
Metadata EMSG | YA | Disematkan dalam FMP4 |
Perlindungan konten | ||
Widevine | YA | Skema "cenc": API 19+; Skema "cbcs": API 25+ |
PlayReady SL2000 | YA | Android TV, khusus skema "cenc" |
ClearKey | YA | API 21+, khusus skema "cenc" |
Pemutaran live | ||
Pemutaran live reguler | YA | |
Pemutaran live CMAF dengan latensi ultra-rendah | YA | |
Common Media Client Data (CMCD) | YA | Panduan Integrasi |
SmoothStreaming
ExoPlayer mendukung SmoothStreaming dengan format penampung FMP4. Streaming media harus didemux, yang berarti video, audio, dan teks harus ditentukan dalam elemen StreamIndex yang berbeda dalam manifes SmoothStreaming. Format sampel audio dan video yang disertakan juga harus didukung (lihat bagian format sampel untuk mengetahui detailnya).
Fitur | Didukung | Komentar |
---|---|---|
Container | ||
FMP4 | YA | Khusus streaming yang didemux |
Teks tertutup/subtitel | ||
TTML | YA | Disematkan dalam FMP4 |
Perlindungan konten | ||
PlayReady SL2000 | YA | Khusus Android TV |
Pemutaran live | ||
Pemutaran live reguler | YA | |
Common Media Client Data (CMCD) | YA | Panduan Integrasi |
HLS
ExoPlayer mendukung HLS dengan beberapa format penampung. Format sampel audio dan video yang disertakan juga harus didukung (lihat bagian format sampel untuk mengetahui detailnya). Sebaiknya produser konten HLS membuat streaming HLS berkualitas tinggi, seperti yang dijelaskan di sini.
Fitur | Didukung | Komentar |
---|---|---|
Container | ||
MPEG-TS | YA | |
FMP4/CMAF | YA | |
ADTS (AAC) | YA | |
MP3 | YA | |
Teks tertutup/subtitel | ||
CEA-608 | YA | |
CEA-708 | YA | |
WebVTT | YA | |
Metadata | ||
ID3 | YA | |
SCTE-35 | TIDAK | |
Perlindungan konten | ||
AES-128 | YA | |
Contoh AES-128 | TIDAK | |
Widevine | YA | API 19+ ("skema cenc") dan 25+ ("skema cbcs") |
PlayReady SL2000 | YA | Khusus Android TV |
Kontrol server | ||
Update delta | YA | |
Memblokir pemuatan ulang playlist | YA | |
Memblokir pemuatan petunjuk pramuat | YA | Kecuali untuk byterange dengan panjang yang tidak ditentukan |
Pemutaran live | ||
Pemutaran live reguler | YA | |
HLS latensi rendah (Apple) | YA | |
HLS latensi rendah (Komunitas) | TIDAK | |
Common Media Client Data (CMCD) | YA | Panduan Integrasi |
Format penampung progresif
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 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 termudah untuk mengaktifkan fungsi ini
untuk semua ekstraktor yang mendukungnya adalah dengan 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.
RTSP
ExoPlayer mendukung RTSP live dan on demand. Format contoh dan jenis jaringan yang didukung tercantum di bawah.
Format contoh yang didukung
- H264 (deskripsi media SDP harus menyertakan data SPS/PPS dalam atribut fmtp untuk inisialisasi dekoder).
- AAC (dengan bitstream ADTS).
- AC3.
Jenis jaringan yang didukung
- RTP melalui unicast UDP (multicast tidak didukung).
- RTSP yang diselingi, RTP melalui RTSP menggunakan TCP.
Contoh format
Secara default, ExoPlayer menggunakan dekoder platform Android. Oleh karena itu, format sampel yang didukung bergantung pada platform yang mendasarinya, bukan pada ExoPlayer. Lihat Format media yang didukung untuk dokumentasi tentang format contoh yang didukung oleh perangkat Android. Perhatikan bahwa setiap perangkat mungkin mendukung format tambahan selain yang tercantum.
Selain dekoder platform Android, ExoPlayer juga dapat menggunakan ekstensi dekoder software. Library ini harus di-build secara manual dan disertakan dalam project yang ingin menggunakannya. Saat ini kami menyediakan library decoder software untuk AV1, VP9, FLAC, Opus, FFmpeg, MIDI, dan IAMF.
Library FFmpeg
Library FFmpeg mendukung decoding berbagai format contoh audio. Anda dapat memilih dekoder yang akan disertakan saat mem-build library, seperti yang didokumentasikan dalam README.md library. Tabel berikut memberikan pemetaan dari format sampel audio ke nama dekoder FFmpeg yang sesuai.
Format contoh | Nama decoder |
---|---|
Vorbis | vorbis |
Opus | opus |
FLAC | flac |
ALAC | alac |
PCM μ-law | pcm_mulaw |
PCM A-law | pcm_alaw |
MP1, MP2, MP3 | mp3 |
AMR-NB | amrnb |
AMR-WB | amrwb |
AAC | aac |
AC-3 | ac3 |
E-AC-3 | eac3 |
DTS, DTS-HD | dca |
TrueHD | mlp truehd |
Gambar
ExoPlayer mendukung format gambar berikut. Lihat Library Pemuatan Gambar untuk mengetahui cara berintegrasi dengan library eksternal yang dapat memberikan dukungan untuk kumpulan format yang berbeda.
Format gambar | Didukung | Catatan |
---|---|---|
BMP | YA | |
GIF | TIDAK | Tidak ada dukungan Pengekstrak |
JPEG | YA | |
Foto Gerakan JPEG | YA | Gambar diam dan video didukung |
JPEG Ultra HDR | YA | Kembali ke SDR sebelum Android 14 atau di layar non-HDR |
PNG | YA | |
WebP | YA | |
HEIF/HEIC | YA | |
Foto Motion HEIC | Sebagian | Hanya gambar diam yang didukung* |
AVIF (dasar pengukuran) | YA | Hanya didekode di Android 14+ |
* Bagian video dari foto gerakan HEIC dapat diperoleh dengan MetadataRetriever dan diputar sebagai file mandiri.
Format subtitel mandiri
ExoPlayer mendukung file subtitel mandiri dalam berbagai format. File subtitel dapat dimuat secara sideload seperti yang dijelaskan di halaman item media.
Format penampung | Didukung | Jenis MIME |
---|---|---|
WebVTT | YA | MimeTypes.TEXT_VTT |
TTML / SMPTE-TT | YA | MimeTypes.APPLICATION_TTML |
SubRip | YA | MimeTypes.APPLICATION_SUBRIP |
SubStationAlpha (SSA/ASS) | YA | MimeTypes.TEXT_SSA |
Pemutaran video HDR
ExoPlayer menangani ekstraksi video rentang dinamis tinggi (HDR) dalam berbagai penampung, termasuk Dolby Vision dalam MP4 dan HDR10+ dalam Matroska/WebM. Dekode dan menampilkan konten HDR bergantung pada dukungan dari platform dan perangkat Android. Lihat Pemutaran Video HDR untuk mempelajari cara memeriksa kemampuan decoding/tampilan HDR dan batasan dukungan HDR di seluruh versi Android.
Saat memutar streaming HDR yang memerlukan dukungan untuk profil codec tertentu, pemilih MediaCodec
default ExoPlayer akan memilih dekoder yang mendukung
profil tersebut (jika tersedia), meskipun dekoder lain untuk jenis MIME yang sama yang
tidak mendukung profil tersebut muncul lebih tinggi di daftar codec. Hal ini dapat mengakibatkan
pemilihan decoder software jika streaming melebihi
kemampuan decoder hardware untuk jenis MIME yang sama.