เมื่อกำหนดรูปแบบที่ ExoPlayer รองรับ โปรดทราบว่า "รูปแบบสื่อ" นั้นกำหนดได้หลายระดับ โดยระดับต่างๆ มีดังนี้
- รูปแบบของตัวอย่างสื่อแต่ละรายการ (เช่น เฟรมของวิดีโอหรือเฟรมของเสียง) ตัวอย่างเหล่านี้เป็นรูปแบบตัวอย่าง โปรดทราบว่าไฟล์วิดีโอทั่วไปจะมีสื่อในรูปแบบตัวอย่างอย่างน้อย 2 รูปแบบ ได้แก่ รูปแบบสำหรับวิดีโอ (เช่น H.264) และรูปแบบสำหรับเสียง (เช่น AAC)
- รูปแบบของคอนเทนเนอร์ที่มีตัวอย่างสื่อและข้อมูลเมตาที่เกี่ยวข้อง รูปแบบเหล่านี้คือรูปแบบคอนเทนเนอร์ ไฟล์สื่อมีรูปแบบคอนเทนเนอร์เดียว (เช่น MP4) ซึ่งมักจะระบุด้วยนามสกุลไฟล์ โปรดทราบว่าสำหรับรูปแบบเสียงอย่างเดียวบางรูปแบบ (เช่น MP3) รูปแบบของตัวอย่างและคอนเทนเนอร์อาจเหมือนกัน
- เทคโนโลยีการสตรีมที่ปรับเปลี่ยนได้ เช่น DASH, SmoothStreaming และ HLS รูปแบบเหล่านี้ไม่ใช่รูปแบบสื่อ แต่คุณยังคงต้องกำหนดระดับการรองรับที่ ExoPlayer มี
ส่วนต่อไปนี้จะกำหนดการรองรับของ ExoPlayer ในแต่ละระดับ ตั้งแต่สูงสุดไปจนถึงต่ำสุด ส่วน 2 ส่วนสุดท้ายจะอธิบายการรองรับรูปแบบคำบรรยายแบบสแตนด์อโลนและการเล่นวิดีโอ HDR
การสตรีมแบบปรับอัตโนมัติ
DASH
ExoPlayer รองรับ DASH ที่มีรูปแบบคอนเทนเนอร์หลายรูปแบบ สตรีมสื่อต้องได้รับการแยกข้อมูล ซึ่งหมายความว่าวิดีโอ เสียง และข้อความต้องกำหนดไว้ในองค์ประกอบ AdaptationSet
ที่ต่างกันในไฟล์ Manifest ของ DASH (CEA-608 เป็นข้อยกเว้นตามที่อธิบายไว้ในตารางด้านล่าง) นอกจากนี้ รูปแบบของตัวอย่างเสียงและวิดีโอที่รวมอยู่ด้วยต้องได้รับการรองรับด้วย (ดูรายละเอียดในส่วนรูปแบบของตัวอย่าง)
ฟีเจอร์ | รองรับ | ความคิดเห็น |
---|---|---|
คอนเทนเนอร์ | ||
FMP4 | ใช่ | สตรีมที่แยกข้อมูลออกแล้วเท่านั้น |
WebM | ใช่ | สตรีมที่แยกข้อมูลออกแล้วเท่านั้น |
Matroska | ใช่ | สตรีมที่แยกข้อมูลออกแล้วเท่านั้น |
MPEG-TS | ไม่ | ไม่มีแผนการสนับสนุน |
คำบรรยายแทนเสียง/คำบรรยายวิดีโอ | ||
TTML | ใช่ | ไฟล์ RAW หรือฝังอยู่ใน FMP4 ตาม ISO/IEC 14496-30 |
WebVTT | ใช่ | ไฟล์ RAW หรือฝังอยู่ใน FMP4 ตาม ISO/IEC 14496-30 |
CEA-608 | ใช่ | ฝังอยู่ใน FMP4 เมื่อส่งสัญญาณโดยใช้ตัวบ่งชี้การช่วยเหลือพิเศษ SCTE |
CEA-708 | ใช่ | ฝังอยู่ใน FMP4 เมื่อส่งสัญญาณโดยใช้ตัวบ่งชี้การช่วยเหลือพิเศษ SCTE |
ข้อมูลเมตา | ||
ข้อมูลเมตา EMSG | ใช่ | ฝังอยู่ใน FMP4 |
การปกป้องเนื้อหา | ||
Widevine | ใช่ | รูปแบบ "cenc": API 19 ปีขึ้นไป รูปแบบ "cbcs": API 25 ปีขึ้นไป |
PlayReady SL2000 | ใช่ | Android TV, รูปแบบ "cenc" เท่านั้น |
ClearKey | ใช่ | API ระดับ 21 ขึ้นไป รูปแบบ "cenc" เท่านั้น |
การเล่นแบบสด | ||
การเล่นแบบสดปกติ | ใช่ | |
การเล่นแบบสดของ CMAF ที่มีเวลาในการตอบสนองต่ำมาก | ใช่ | |
Common Media Client Data (CMCD) | ใช่ | คู่มือการผสานรวม |
SmoothStreaming
ExoPlayer รองรับ SmoothStreaming ด้วยรูปแบบคอนเทนเนอร์ FMP4 สตรีมสื่อต้องแยกข้อมูล ซึ่งหมายความว่าต้องกำหนดวิดีโอ เสียง และข้อความในองค์ประกอบต่างๆ ของ StreamIndex ในไฟล์ Manifest ของ SmoothStreaming นอกจากนี้ รูปแบบของตัวอย่างเสียงและวิดีโอที่รวมอยู่ด้วยต้องได้รับการรองรับด้วย (ดูรายละเอียดในส่วนรูปแบบของตัวอย่าง)
ฟีเจอร์ | รองรับ | ความคิดเห็น |
---|---|---|
คอนเทนเนอร์ | ||
FMP4 | ใช่ | สตรีมที่แยกข้อมูลออกแล้วเท่านั้น |
คำบรรยายแทนเสียง/คำบรรยายวิดีโอ | ||
TTML | ใช่ | ฝังอยู่ใน FMP4 |
การปกป้องเนื้อหา | ||
PlayReady SL2000 | ใช่ | Android TV เท่านั้น |
การเล่นแบบสด | ||
การเล่นแบบสดปกติ | ใช่ | |
Common Media Client Data (CMCD) | ใช่ | คู่มือการผสานรวม |
HLS
ExoPlayer รองรับ HLS ที่มีรูปแบบคอนเทนเนอร์หลายรูปแบบ นอกจากนี้ รูปแบบของตัวอย่างเสียงและวิดีโอที่รวมอยู่ด้วยต้องได้รับการรองรับด้วย (ดูรายละเอียดในส่วนรูปแบบของตัวอย่าง) เราขอแนะนำให้ผู้ผลิตเนื้อหา HLS สร้างสตรีม HLS คุณภาพสูงตามที่อธิบายไว้ที่นี่
ฟีเจอร์ | รองรับ | ความคิดเห็น |
---|---|---|
คอนเทนเนอร์ | ||
MPEG-TS | ใช่ | |
FMP4/CMAF | ใช่ | |
ADTS (AAC) | ใช่ | |
MP3 | ใช่ | |
คำบรรยายแทนเสียง/คำบรรยายวิดีโอ | ||
CEA-608 | ใช่ | |
CEA-708 | ใช่ | |
WebVTT | ใช่ | |
ข้อมูลเมตา | ||
ID3 | ใช่ | |
SCTE-35 | ไม่ | |
การปกป้องเนื้อหา | ||
AES-128 | ใช่ | |
ตัวอย่าง AES-128 | ไม่ | |
Widevine | ใช่ | API 19+ ("รูปแบบ cenc") และ 25+ ("รูปแบบ cbcs") |
PlayReady SL2000 | ใช่ | Android TV เท่านั้น |
การควบคุมเซิร์ฟเวอร์ | ||
การอัปเดต Delta | ใช่ | |
การบล็อกการโหลดเพลย์ลิสต์ซ้ำ | ใช่ | |
การบล็อกการโหลดคำแนะนำในการโหลดล่วงหน้า | ใช่ | ยกเว้นช่วงไบต์ที่มีความยาวที่ไม่ระบุ |
การเล่นแบบสด | ||
การเล่นแบบสดปกติ | ใช่ | |
HLS แบบเวลาในการตอบสนองต่ำ (Apple) | ใช่ | |
HLS แบบเวลาในการตอบสนองต่ำ (ชุมชน) | ไม่ | |
Common Media Client Data (CMCD) | ใช่ | คู่มือการผสานรวม |
รูปแบบคอนเทนเนอร์แบบโปรเกรสซีฟ
สตรีมในรูปแบบคอนเทนเนอร์ต่อไปนี้เล่นได้โดยตรงด้วย ExoPlayer นอกจากนี้ รูปแบบของตัวอย่างเสียงและวิดีโอที่รวมอยู่ด้วยต้องได้รับการรองรับด้วย (ดูรายละเอียดในส่วนรูปแบบของตัวอย่าง) ดูการรองรับคอนเทนเนอร์และรูปแบบรูปภาพได้ที่หัวข้อรูปภาพ
รูปแบบคอนเทนเนอร์ | รองรับ | ความคิดเห็น |
---|---|---|
MP4 | ใช่ | |
M4A | ใช่ | |
FMP4 | ใช่ | |
WebM | ใช่ | |
Matroska | ใช่ | |
MP3 | ใช่ | สตรีมบางรายการจะกรอได้โดยใช้การกรอตามอัตราบิตคงที่เท่านั้น** |
Ogg | ใช่ | มี Vorbis, Opus และ FLAC |
WAV | ใช่ | |
MPEG-TS | ใช่ | |
MPEG-PS | ใช่ | |
FLV | ใช่ | ข้ามไม่ได้* |
ADTS (AAC) | ใช่ | เฉพาะที่กรอได้โดยใช้การกรอตามอัตราบิตคงที่** |
FLAC | ใช่ | การใช้คลัง FLAC หรือโปรแกรมแยก FLAC ในคลัง ExoPlayer*** |
AMR | ใช่ | เฉพาะที่กรอได้โดยใช้การกรอตามอัตราบิตคงที่** |
* ระบบไม่รองรับการกรอเนื่องจากคอนเทนเนอร์ไม่ได้ระบุข้อมูลเมตา (เช่น ดัชนีตัวอย่าง) เพื่ออนุญาตให้โปรแกรมเล่นสื่อกรออย่างมีประสิทธิภาพ หากจำเป็นต้องใช้การกรอ เราขอแนะนำให้ใช้รูปแบบคอนเทนเนอร์ที่เหมาะสมกว่า
** โปรแกรมแยกเหล่านี้มี Flag FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
สำหรับเปิดใช้การกรอเวลาโดยประมาณโดยใช้ค่าประมาณอัตราบิตคงที่ ฟังก์ชันการทำงานนี้จะไม่เปิดใช้โดยค่าเริ่มต้น วิธีที่ง่ายที่สุดในการเปิดใช้ฟังก์ชันการทำงานนี้สําหรับเครื่องมือแยกข้อมูลทั้งหมดที่รองรับคือการใช้ DefaultExtractorsFactory.setConstantBitrateSeekingEnabled
ตามที่อธิบายไว้ที่นี่
*** โปรแกรมแยกไฟล์ FLAC จะแสดงผลเสียงดิบ ซึ่งเฟรมเวิร์กจะจัดการได้ในระดับ API ทั้งหมด เครื่องมือแยก FLAC ของไลบรารี ExoPlayer จะแสดงผลเฟรมเสียง FLAC จึงต้องใช้ตัวถอดรหัส FLAC (เช่น MediaCodec
ตัวถอดรหัสที่จัดการ FLAC (จำเป็นตั้งแต่ API ระดับ 27) หรือไลบรารี FFmpeg ที่เปิดใช้ FLAC) DefaultExtractorsFactory
ใช้โปรแกรมแยกส่วนขยายหากแอปพลิเคชันสร้างขึ้นด้วยไลบรารี FLAC
ไม่เช่นนั้นจะใช้เครื่องมือแยกไลบรารี ExoPlayer
RTSP
ExoPlayer รองรับทั้ง RTSP แบบสดและแบบออนดีมานด์ รูปแบบและประเภทเครือข่ายของตัวอย่างที่รองรับมีดังนี้
รูปแบบตัวอย่างที่รองรับ
- H264 (คำอธิบายสื่อ SDP ต้องมีข้อมูล SPS/PPS ในแอตทริบิวต์ fmtp สำหรับการจัดเตรียมโปรแกรมถอดรหัส)
- AAC (พร้อมสตรีมบิต ADTS)
- AC3
ประเภทเครือข่ายที่รองรับ
- RTP ผ่าน UDP แบบยูนิแคสต์ (ไม่รองรับมัลติแคสต์)
- RTSP แบบสลับช่อง, RTP ผ่าน RTSP โดยใช้ TCP
ตัวอย่างรูปแบบ
โดยค่าเริ่มต้น ExoPlayer จะใช้โปรแกรมถอดรหัสแพลตฟอร์มของ Android ดังนั้นรูปแบบตัวอย่างที่รองรับจะขึ้นอยู่กับแพลตฟอร์มพื้นฐาน ไม่ใช่ ExoPlayer โปรดดูเอกสารประกอบเกี่ยวกับรูปแบบตัวอย่างที่อุปกรณ์ Android รองรับได้ที่รูปแบบสื่อที่รองรับ โปรดทราบว่าอุปกรณ์แต่ละเครื่องอาจรองรับรูปแบบเพิ่มเติมนอกเหนือจากที่ระบุไว้
นอกจากโปรแกรมถอดรหัสแพลตฟอร์มของ Android แล้ว ExoPlayer ยังใช้ส่วนขยายโปรแกรมถอดรหัสซอฟต์แวร์ได้ด้วย โดยต้องสร้างและรวมไว้ในโปรเจ็กต์ที่ต้องการใช้ ปัจจุบันเรามีไลบรารีโปรแกรมถอดรหัสซอฟต์แวร์สำหรับ AV1, VP9, FLAC, Opus, FFmpeg, MIDI และ IAMF
ไลบรารี FFmpeg
คลัง FFmpeg รองรับการถอดรหัสรูปแบบตัวอย่างเสียงที่หลากหลาย คุณเลือกตัวถอดรหัสที่จะรวมไว้เมื่อสร้างไลบรารีได้ ตามที่ระบุไว้ใน README.md ของไลบรารี ตารางต่อไปนี้แสดงการแมปรูปแบบตัวอย่างเสียงกับชื่อตัวถอดรหัส FFmpeg ที่เกี่ยวข้อง
รูปแบบตัวอย่าง | ชื่อตัวถอดรหัส |
---|---|
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 |
รูปภาพ
ExoPlayer รองรับรูปแบบรูปภาพต่อไปนี้ ดูวิธีผสานรวมกับไลบรารีภายนอกที่อาจรองรับชุดรูปแบบอื่นได้จากไลบรารีการโหลดรูปภาพ
รูปแบบรูปภาพ | รองรับ | หมายเหตุ |
---|---|---|
BMP | ใช่ | |
GIF | ไม่ | ไม่รองรับเครื่องมือแยก |
JPEG | ใช่ | |
รูปภาพเคลื่อนไหว JPEG | ใช่ | รองรับรูปภาพนิ่งและวิดีโอ |
JPEG Ultra HDR | ใช่ | เปลี่ยนกลับไปใช้ SDR ก่อน Android 14 หรือในจอแสดงผลที่ไม่ใช่ HDR |
PNG | ใช่ | |
WebP | ใช่ | |
HEIF/HEIC | ใช่ | |
รูปภาพเคลื่อนไหว HEIC | เพียงบางส่วน | รองรับเฉพาะภาพนิ่ง* |
AVIF (เบสไลน์) | ใช่ | ถอดรหัสได้ใน Android 14 ขึ้นไปเท่านั้น |
* คุณดูส่วนวิดีโอของรูปภาพเคลื่อนไหว HEIC ได้โดยใช้ MetadataRetriever และเล่นเป็นไฟล์เดี่ยว
รูปแบบคำบรรยายแบบสแตนด์อโลน
ExoPlayer รองรับไฟล์คำบรรยายแบบสแตนด์อโลนในหลากหลายรูปแบบ คุณโหลดไฟล์คำบรรยายแทนเสียงลงในอุปกรณ์ได้ตามที่อธิบายไว้ในหน้ารายการสื่อ
รูปแบบคอนเทนเนอร์ | รองรับ | ประเภท MIME |
---|---|---|
WebVTT | ใช่ | MimeTypes.TEXT_VTT |
TTML / SMPTE-TT | ใช่ | MimeTypes.APPLICATION_TTML |
SubRip | ใช่ | MimeTypes.APPLICATION_SUBRIP |
SubStationAlpha (SSA/ASS) | ใช่ | MimeTypes.TEXT_SSA |
การเล่นวิดีโอ HDR
ExoPlayer จัดการการดึงข้อมูลวิดีโอ High Dynamic Range (HDR) ในคอนเทนเนอร์ต่างๆ ซึ่งรวมถึง Dolby Vision ใน MP4 และ HDR10+ ใน Matroska/WebM การถอดรหัสและการแสดงเนื้อหา HDR จะขึ้นอยู่กับการรองรับจากแพลตฟอร์มและอุปกรณ์ Android ดูข้อมูลเกี่ยวกับการตรวจสอบความสามารถในการถอดรหัส/แสดงผล HDR และข้อจำกัดของการรองรับ HDR ใน Android แต่ละเวอร์ชันได้ที่หัวข้อการเล่นวิดีโอ HDR
เมื่อเล่นสตรีม HDR ที่ต้องใช้โปรไฟล์ตัวแปลงรหัสที่เฉพาะเจาะจง ตัวเลือก MediaCodec
เริ่มต้นของ ExoPlayer จะเลือกตัวถอดรหัสที่รองรับโปรไฟล์นั้น (หากมี) แม้ว่าตัวถอดรหัสอื่นสำหรับ MIME ประเภทเดียวกันซึ่งไม่รองรับโปรไฟล์นั้นจะปรากฏในรายการตัวแปลงรหัสสูงขึ้น ซึ่งอาจส่งผลให้ระบบเลือกโปรแกรมถอดรหัสในกรณีที่สตรีมมีขนาดใหญ่เกินความสามารถของโปรแกรมถอดรหัสฮาร์ดแวร์สำหรับ MIME ประเภทเดียวกัน