Saat menentukan format yang didukung ExoPlayer, penting untuk dicatat bahwa "format media" ditentukan pada beberapa level. Dari tingkat terendah hingga tertinggi, yaitu:
- Format masing-masing sampel media (seperti frame video atau frame audio). Berikut adalah format contoh. Perhatikan bahwa file video biasa akan memuat media dalam minimal dua format sampel; satu untuk video (misalnya, H.264) dan satu untuk audio (misalnya, AAC).
- Format penampung yang menampung sampel media dan terkait {i>metadata<i}. Ini adalah format penampung. File media memiliki satu penampung (misalnya, MP4), yang biasanya ditunjukkan dengan ekstensi file. Catatan bahwa untuk sebagian format khusus audio (misalnya, MP3), format sampel dan kontainer mungkin sama.
- Teknologi streaming adaptif seperti DASH, SmoothStreaming, dan HLS. Ini bukan format media semacam itu, tapi Anda tetap perlu menentukan tingkat dukungan yang disediakan ExoPlayer.
Bagian berikut mendefinisikan dukungan ExoPlayer di setiap level, dari yang tertinggi hingga dan nilai terendah. Dua bagian terakhir menjelaskan dukungan untuk format subtitel mandiri dan pemutaran video HDR.
Streaming adaptif
DASH
ExoPlayer mendukung DASH dengan beberapa format container. Streaming media harus
didemuxed, artinya video, audio, dan teks harus didefinisikan secara
Elemen AdaptationSet
dalam manifes DASH (CEA-608 merupakan pengecualian karena
yang dijelaskan dalam tabel di bawah). Format sampel audio dan video yang ada harus
juga didukung (lihat
contoh format 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 | ||
TTML | YA | Mentah, atau tertanam dalam FMP4 sesuai dengan ISO/IEC 14496-30 |
WebVTT | YA | Mentah, atau tertanam dalam FMP4 sesuai dengan ISO/IEC 14496-30 |
CEA 608 | YA | Tersemat di FMP4 saat diberi sinyal menggunakan deskriptor Aksesibilitas SCTE |
CEA 708 | YA | Tersemat di FMP4 saat diberi sinyal menggunakan deskriptor Aksesibilitas SCTE |
Metadata | ||
Metadata EMSG | YA | Disematkan di FMP4 |
Perlindungan konten | ||
Widevine | YA | "cenc" skema: API 19+; "cbcs" skema: API 25+ |
SL2000 PlayReady | YA | Android TV, "cenc" khusus skema |
{i>ClearKey<i} | YA | API 21+, "cenc" khusus skema |
Pemutaran live | ||
Pemutaran live reguler | YA | |
Pemutaran live CMAF berlatensi sangat rendah | YA | |
Data Klien Media Umum (CMCD) | YA | Panduan Integrasi |
SmoothStreaming
ExoPlayer mendukung SmoothStreaming dengan format container FMP4. Streaming media harus didemux, artinya video, audio, dan teks harus didefinisikan secara berbeda Elemen StreamIndex dalam manifes SmoothStreaming. Audio yang dimuat dan format sampel video juga harus didukung (lihat contoh format untuk mengetahui detailnya).
Fitur | Didukung | Komentar |
---|---|---|
Container | ||
FMP4 | YA | Khusus streaming yang didemux |
Teks tertutup | ||
TTML | YA | Disematkan di FMP4 |
Perlindungan konten | ||
SL2000 PlayReady | 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. Audio yang dimuat dan format sampel video juga harus didukung (lihat contoh format untuk mengetahui detailnya). Rab sangat menganjurkan produser konten HLS untuk menghasilkan 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 | ||
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+ ("cenc") dan 25+ (skema "cbcs") |
SL2000 PlayReady | YA | Khusus Android TV |
Kontrol server | ||
Pembaruan 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 (Komunitas) berlatensi rendah | 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 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 | Mengandung 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 tanda FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
untuk
mengaktifkan pencarian perkiraan menggunakan asumsi kecepatan bit yang konstan. Ini
fungsi tersebut 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 output audio mentah, yang dapat ditangani
oleh framework di semua level API. Output ekstraktor FLAC library ExoPlayer
Frame audio FLAC dan sebagainya bergantung pada adanya decoder FLAC (misalnya, MediaCodec
decoder 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, sistem akan menggunakan ekstraktor library ExoPlayer.
RTSP
ExoPlayer mendukung RTSP live dan on demand. Contoh format yang didukung dan jenis jaringan tercantum di bawah ini.
Contoh format yang didukung
- H264 (deskripsi media SDP harus menyertakan data SPS/PPS dalam untuk inisialisasi decoder).
- AAC (dengan bitstream ADTS).
- AC3.
Jenis jaringan yang didukung
- RTP melalui UDP unicast (multicast tidak didukung).
- RTSP berselisih, RTP melalui RTSP menggunakan TCP.
Contoh format
Secara default, ExoPlayer menggunakan decoder platform Android. Oleh karena itu, model format sampel 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 masing-masing perangkat dapat mendukung format tambahan di luar yang tercantum.
Selain decoder platform Android, ExoPlayer juga dapat menggunakan ekstensi decoder software. Solusi ini harus dibuat secara manual dan disertakan dalam proyek yang ingin memanfaatkannya. Saat ini kami menyediakan decoder software library untuk AV1 VP9 FLAC, Opus, dan FFmpeg.
Library FFmpeg
Library FFmpeg mendukung mendekode berbagai format sampel audio yang berbeda. Anda dapat memilih untuk disertakan saat membangun library, seperti yang didokumentasikan dalam README.md library. Tujuan tabel berikut ini menyediakan pemetaan dari format sampel audio ke Nama dekoder FFmpeg.
Format contoh | Nama decoder |
---|---|
Vorbis | Vorbis |
Opus | opus |
FLAC | Flac |
ALAC | Alac |
Hukum mikro PCM | {i>pcm_mulaw<i} |
Peraturan PCM | {i>pcm_alaw<i} |
MP1, MP2, MP3 | mp3 |
AMR-NB | Amrnb |
AMR-WB | Amrwb |
AAC | aac |
AC-3 | AC3 |
E-AC-3 | Eac3 |
DTS, DTS-HD | Deka |
TrueHD | mlp truehd |
Gambar
ExoPlayer mendukung format gambar berikut. Lihat Library Pemuatan Gambar mengenai cara mengintegrasikan dengan library eksternal yang dapat memberikan dukungan untuk kumpulan format yang berbeda.
Format gambar | Didukung | Catatan |
---|---|---|
BMP | YA | |
GIF | TIDAK | Tidak ada dukungan Ekstraktor |
JPEG | YA | |
Foto Motion JPEG | YA | Gambar diam dan video didukung |
JPEG Ultra HDR | YA | Kembali ke SDR sebelum Android 14 atau setelahnya layar non-HDR |
PNG | YA | |
WebP | YA | |
HEIF/HEIC | YA | |
Foto Gerakan HEIC | Sebagian | Hanya gambar diam yang didukung* |
AVIF (dasar pengukuran) | YA | Didekode di Android 14 dan yang lebih baru saja |
* 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. 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 , termasuk Dolby Vision dalam MP4 dan HDR10+ di Matroska/WebM. Dekode dan menampilkan konten HDR bergantung pada dukungan dari platform Android dan perangkat seluler. Lihat Pemutaran Video HDR untuk mempelajari cara memeriksa kemampuan dekode/tampilan HDR serta batasan Dukungan HDR di seluruh versi Android.
Saat memutar streaming HDR yang memerlukan dukungan untuk profil codec tertentu,
Pemilih MediaCodec
default ExoPlayer akan memilih decoder yang mendukungnya
(jika ada), meskipun decoder lain untuk jenis MIME yang sama dengan
tidak mendukung profil itu muncul di posisi yang lebih tinggi dalam daftar codec. Hal ini dapat mengakibatkan
memilih decoder software jika streaming melebihi
kemampuan decoder hardware untuk jenis MIME yang sama.