รูปแบบที่รองรับ

เมื่อกำหนดรูปแบบที่ 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 ใช่ ไฟล์ดิบหรือฝังอยู่ใน FMP4 ตาม ISO/IEC 14496-30
WebVTT ใช่ ไฟล์ดิบหรือฝังอยู่ใน 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" เท่านั้น
การแทรกโฆษณา
การเล่นแบบหลายช่วงเวลา ใช่
การแสดงโฆษณาที่เซิร์ฟเวอร์แนะนํา (xlinks) ไม่
โฆษณาฝั่งเซิร์ฟเวอร์และฝั่งไคลเอ็นต์ IMA ใช่ คู่มือการแทรกโฆษณา
การเล่นแบบสด
การเล่นแบบสดปกติ ใช่
การเล่นแบบสดของ CMAF ที่มีเวลาในการตอบสนองต่ำมาก ใช่
Common Media Client Data (CMCD) ใช่ คู่มือการผสานรวม 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 ใช่
การบล็อกการโหลดเพลย์ลิสต์ซ้ำ ใช่
การบล็อกการโหลดคำแนะนำในการโหลดล่วงหน้า ใช่ ยกเว้นช่วงไบต์ที่มีความยาวที่ไม่ระบุ
การแทรกโฆษณา
การแสดงโฆษณาที่เซิร์ฟเวอร์ควบคุม (โฆษณาคั่นระหว่างหน้า) เพียงบางส่วน VOD ที่มี X-ASSET-URI เท่านั้น เราจะเพิ่มสตรีมแบบสดและX-ASSET-LISTในภายหลัง
โฆษณาฝั่งเซิร์ฟเวอร์และฝั่งไคลเอ็นต์ IMA ใช่ คู่มือการแทรกโฆษณา
การเล่นแบบสด
การเล่นแบบสดปกติ ใช่
HLS แบบเวลาในการตอบสนองต่ำ (Apple) ใช่
HLS แบบเวลาในการตอบสนองต่ำ (ชุมชน) ไม่
Common Media Client Data CMCD ใช่ คู่มือการผสานรวม 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 Library จะแสดงผลเสียงดิบ ซึ่งเฟรมเวิร์กจะจัดการได้ในระดับ 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 และ MPEG-H

ไลบรารี 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 ประเภทเดียวกัน