Saat menentukan format yang didukung ExoPlayer, penting untuk diperhatikan bahwa "format media" ditentukan di beberapa tingkat. Dari tingkat terendah hingga tertinggi, berikut adalah tingkatannya:
- Format sampel media individual (seperti frame video atau frame audio). Berikut adalah contoh format. Perhatikan bahwa file video biasa akan berisi media dalam setidaknya 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. Ini bukan format media, tetapi tetap perlu ditentukan tingkat dukungan yang diberikan ExoPlayer.
Bagian berikut menentukan dukungan ExoPlayer di setiap level, dari yang tertinggi hingga terendah. Dua bagian terakhir menjelaskan dukungan untuk format subtitle mandiri dan pemutaran video HDR.
Streaming adaptif
DASH
ExoPlayer mendukung DASH dengan beberapa format penampung. Aliran 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 | Hanya aliran yang di-demux |
| WebM | YA | Hanya aliran yang di-demux |
| Matroska | YA | Hanya aliran yang di-demux |
| 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 deskriptor Aksesibilitas SCTE |
| CEA-708 | YA | Disematkan dalam FMP4 saat diberi sinyal menggunakan deskriptor Aksesibilitas SCTE |
| Metadata | ||
| Metadata EMSG | YA | Disematkan di FMP4 |
| Perlindungan konten | ||
| Widevine | YA | Skema "cenc": API 19+; Skema "cbcs": API 25+ |
| PlayReady SL2000 | YA | Android TV, hanya skema "cenc" |
| ClearKey | YA | API 21+, hanya skema "cenc" |
| Penyisipan iklan | ||
| Pemutaran multi-periode | YA | |
| Penyisipan iklan yang dipandu server (xlinks) | TIDAK | |
| Iklan sisi server dan sisi klien IMA | YA | Panduan penyisipan iklan |
| Pemutaran live | ||
| Pemutaran live reguler | YA | |
| Pemutaran live CMAF dengan latensi ultra-rendah | YA | |
| Common Media Client Data (CMCD) | YA | Panduan integrasi CMCD |
SmoothStreaming
ExoPlayer mendukung SmoothStreaming dengan format penampung FMP4. Streaming media harus di-demultipleks, 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 | Hanya aliran yang di-demux |
| Teks tertutup/subtitel | ||
| TTML | YA | Disematkan di 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). Kami sangat menganjurkan produser konten HLS untuk membuat streaming HLS berkualitas tinggi, seperti yang dijelaskan dalam postingan blog ini.
| 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 | |
| AES-128 Sampel | 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 rentang byte dengan panjang yang tidak ditentukan |
| Penyisipan iklan | ||
| Penyisipan iklan yang dipandu server (Interstisial) | Sebagian | Hanya VOD dengan X-ASSET-URI.
Live stream dan
X-ASSET-LIST akan ditambahkan
nanti. |
| Iklan sisi server dan sisi klien IMA | YA | Panduan penyisipan iklan |
| Pemutaran live | ||
| Pemutaran live reguler | YA | |
| HLS latensi rendah (Apple) | YA | |
| HLS latensi rendah (Komunitas) | TIDAK | |
| Data Klien Media Umum CMCD | YA | Panduan integrasi CMCD |
Format container 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 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 keberadaan 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.
RTSP
ExoPlayer mendukung RTSP live dan on demand. Format sampel dan jenis jaringan yang didukung tercantum di bawah.
Format sampel yang didukung
- H264 (deskripsi media SDP harus menyertakan data SPS/PPS dalam atribut fmtp untuk inisialisasi decoder).
- 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 decoder 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 sampel yang didukung oleh perangkat Android. Perhatikan bahwa masing-masing perangkat dapat mendukung format tambahan selain yang tercantum.
Selain decoder platform Android, ExoPlayer juga dapat menggunakan ekstensi decoder software. Objek ini harus dibuat secara manual dan disertakan dalam project yang ingin menggunakannya. Saat ini kami menyediakan library decoder software untuk AV1, VP9, FLAC, Opus, FFmpeg, MIDI, IAMF, dan MPEG-H.
Library FFmpeg
FFmpeg library mendukung decoding berbagai format sampel audio yang berbeda. Anda dapat memilih decoder yang akan disertakan saat membangun library, seperti yang didokumentasikan dalam README.md library. Tabel berikut memberikan pemetaan dari format sampel audio ke nama decoder 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 serangkaian format yang berbeda.
| Format gambar | Didukung | Catatan |
|---|---|---|
| BMP | YA | |
| GIF | TIDAK | Tidak ada dukungan Extractor |
| JPEG | YA | |
| Foto Gerak JPEG | YA | Gambar diam dan video yang 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 | YA | |
| AVIF (dasar) | YA | Hanya didekode di Android 14+ |
Format subtitel mandiri
ExoPlayer mendukung file subtitle mandiri dalam berbagai format. File subtitel dapat di-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. Mendekode dan menampilkan konten HDR bergantung pada dukungan dari platform dan perangkat Android. Lihat Pemutaran Video HDR untuk mempelajari cara memeriksa kemampuan dan batasan decoding/tampilan HDR, serta dukungan HDR di berbagai versi Android.
Saat memutar streaming HDR yang memerlukan dukungan untuk profil codec tertentu, pemilih MediaCodec default ExoPlayer akan memilih decoder yang mendukung profil tersebut (jika tersedia), meskipun decoder lain untuk jenis MIME yang sama yang tidak mendukung profil tersebut muncul lebih tinggi dalam daftar codec. Hal ini dapat mengakibatkan
pemilihan dekoder software jika streaming melampaui
kemampuan dekoder hardware untuk jenis MIME yang sama.