Saat menentukan format yang didukung ExoPlayer, penting untuk diperhatikan bahwa "format media" ditentukan pada beberapa level. Dari level terendah hingga tertinggi, berikut adalah:
- Format masing-masing sampel media (seperti frame video atau frame audio). Ini adalah format contoh. Perhatikan bahwa file video standar 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 format container tunggal (misalnya, MP4), yang biasanya ditunjukkan oleh ekstensi file. Perhatikan bahwa untuk beberapa format audio saja (misalnya, MP3), format sampel dan penampung mungkin sama.
- Teknologi streaming adaptif seperti DASH, SmoothStreaming, dan HLS. Ini bukan format media seperti itu, tetapi masih 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 berbagai format container. Streaming media harus
di-demux, yang berarti video, audio, dan teks harus ditentukan dalam elemen
AdaptationSet
yang berbeda di manifes DASH (CEA-608 merupakan pengecualian seperti
yang dijelaskan pada tabel di bawah). Format sampel audio dan video yang dimuat juga harus didukung (lihat bagian format contoh untuk mengetahui detailnya).
Fitur | Didukung | Komentar |
---|---|---|
Container | ||
FMP4 | YA | Khusus streaming yang dipisahkan |
WebM | YA | Khusus streaming yang dipisahkan |
Matroska | YA | Khusus streaming yang dipisahkan |
MPEG-TS | TIDAK | Tidak ada dukungan yang direncanakan |
Teks/subtitel tertutup | ||
TTML | YA | Mentah, atau disematkan dalam FMP4 menurut ISO/IEC 14496-30 |
WebVTT | YA | Mentah, atau disematkan dalam FMP4 menurut ISO/IEC 14496-30 |
CEA-608 | YA | Disematkan di FMP4 saat diberi sinyal menggunakan deskriptor Aksesibilitas SCTE |
CEA-708 | YA | Disematkan di 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, khusus skema "cenc" |
Tombol Clear | YA | API 21+, khusus skema "cenc" |
Pemutaran live | ||
Pemutaran live reguler | YA | |
Pemutaran live CMAF latensi sangat rendah | YA | |
Data Klien Media Umum (CMCD) | YA | Panduan Integrasi |
SmoothStreaming
ExoPlayer mendukung SmoothStreaming dengan format container FMP4. Streaming media harus di-demux, yang berarti video, audio, dan teks harus ditentukan dalam elemen StreamIndex yang berbeda dalam manifes SmoothStreaming. Format sampel audio dan video yang dimuat juga harus didukung (lihat bagian format contoh untuk detailnya).
Fitur | Didukung | Komentar |
---|---|---|
Container | ||
FMP4 | YA | Khusus streaming yang dipisahkan |
Teks/subtitel tertutup | ||
TTML | YA | Disematkan di FMP4 |
Perlindungan konten | ||
PlayReady SL2000 | YA | Khusus Android TV |
Pemutaran live | ||
Pemutaran live reguler | YA | |
Data Klien Media Umum (CMCD) | YA | Panduan Integrasi |
HLS
ExoPlayer mendukung HLS dengan beberapa format container. Format sampel audio dan video yang dimuat juga harus didukung (lihat bagian format contoh untuk detailnya). Kami sangat mendorong produser konten HLS untuk menghasilkan streaming HLS berkualitas tinggi, seperti yang dijelaskan di sini.
Fitur | Didukung | Komentar |
---|---|---|
Container | ||
MPEG-TS | YA | |
FMP4/CMAF | YA | |
ADT (AAC) | YA | |
MP3 | YA | |
Teks/subtitel tertutup | ||
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 | ||
Info terbaru 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 (Apel) | YA | |
HLS latensi rendah (Komunitas) | TIDAK | |
Data Klien Media Umum (CMCD) | YA | Panduan Integrasi |
Format penampung progresif
Streaming dalam format container berikut dapat diputar langsung oleh ExoPlayer. Format sampel audio dan video yang dimuat juga harus didukung (lihat bagian format contoh untuk detailnya).
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* |
ADT (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** |
Foto motion JPEG | YA | Hanya konten MP4 yang diekstrak |
* Pencarian tidak didukung karena penampung tidak menyediakan metadata (misalnya, indeks contoh) yang memungkinkan pemutar media melakukan pencarian dengan cara yang 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 kecepatan bit 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 audio mentah, yang dapat ditangani
oleh framework di semua level API. Ekstraktor FLAC Library ExoPlayer menghasilkan
frame audio FLAC, sehingga bergantung pada keberadaan 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, ekstraktor library ExoPlayer akan digunakan.
RTSP
ExoPlayer mendukung RTSP live dan on demand. Contoh format dan jenis jaringan yang didukung tercantum di bawah ini.
Format contoh yang didukung
- H264 (deskripsi media SDP harus menyertakan data SPS/PPS dalam atribut fmt'>{}</p untuk inisialisasi decoder).
- AAC (dengan bitstream ADTS).
- AC3
Jenis jaringan yang didukung
- RTP melalui unicast UDP (multicast tidak didukung).
- RTSP berselang-seling, 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 contoh yang didukung oleh perangkat Android. Perlu diketahui bahwa setiap perangkat dapat mendukung format tambahan di luar yang tercantum.
Selain dekoder platform Android, ExoPlayer juga dapat menggunakan ekstensi decoder software. Library ini harus dibuat dan disertakan secara manual dalam project yang ingin memanfaatkannya. Saat ini, kami menyediakan library dekoder software untuk AV1, VP9, FLAC, Opus, dan FFmpeg.
Library FFmpeg
Library FFmpeg mendukung dekode berbagai format sampel audio. Anda dapat memilih dekoder mana yang akan disertakan saat membuat library, seperti yang didokumentasikan dalam README.md library. Tabel berikut menyediakan pemetaan dari format contoh audio ke nama dekoder FFmpeg yang sesuai.
Format contoh | Nama decoder |
---|---|
Vorbis | vorbis |
Opus | karya seni |
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 |
Format subtitel mandiri
ExoPlayer mendukung file subtitel 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 container, termasuk Dolby Vision dalam MP4 dan HDR10+ di Matroska/WebM. Mendekode 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 decoder lain untuk jenis MIME yang sama
yang tidak mendukung profil tersebut muncul di bagian atas daftar codec. Hal ini dapat menyebabkan
pemilihan dekoder software jika streaming melebihi
kemampuan dekoder hardware untuk jenis MIME yang sama.