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

เมื่อกำหนดรูปแบบที่ 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 ที่มีเวลาในการตอบสนองต่ำมาก ใช่
ข้อมูลไคลเอ็นต์สื่อทั่วไป (CMCD) ใช่ คู่มือการผสานรวม CMCD

SmoothStreaming

ExoPlayer รองรับ SmoothStreaming ด้วยรูปแบบคอนเทนเนอร์ FMP4 ต้องแยกสตรีมสื่อออก ซึ่งหมายความว่าต้องกำหนดวิดีโอ เสียง และข้อความในองค์ประกอบ StreamIndex ที่แตกต่างกันในไฟล์ Manifest ของ SmoothStreaming นอกจากนี้ ระบบยังต้องรองรับรูปแบบตัวอย่างเสียงและวิดีโอที่อยู่ในไฟล์ด้วย (ดูรายละเอียดในส่วนรูปแบบตัวอย่าง)

ฟีเจอร์ รองรับ ความคิดเห็น
คอนเทนเนอร์
FMP4 ใช่ สตรีมที่แยกแล้วเท่านั้น
คำบรรยาย/คำบรรยายแทนเสียง
TTML ใช่ ฝังใน FMP4
การปกป้องเนื้อหา
PlayReady SL2000 ใช่ Android TV เท่านั้น
การเล่นสด
การเล่นไลฟ์สดปกติ ใช่
ข้อมูลไคลเอ็นต์สื่อทั่วไป (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 เท่านั้น
การควบคุมเซิร์ฟเวอร์
การอัปเดตแบบเดลต้า ใช่
การบล็อกการโหลดเพลย์ลิสต์ซ้ำ ใช่
การบล็อกการโหลดคำใบ้การโหลดล่วงหน้า ใช่ ยกเว้นไบต์เรนจ์ที่มีความยาว ไม่ระบุ
การแทรกโฆษณา
การแทรกโฆษณาที่เซิร์ฟเวอร์แนะนำ (โฆษณาคั่นระหว่างหน้า) เพียงบางส่วน เฉพาะ VOD ที่มี X-ASSET-URI เราจะเพิ่มไลฟ์สดและ X-ASSET-LISTในภายหลัง
โฆษณาฝั่งเซิร์ฟเวอร์และ ฝั่งไคลเอ็นต์ของ IMA ใช่ คู่มือการแทรกโฆษณา
การเล่นสด
การเล่นไลฟ์สดปกติ ใช่
HLS ที่มีเวลาในการตอบสนองต่ำ (Apple) ใช่
HLS ที่มีเวลาในการตอบสนองต่ำ (ชุมชน) ไม่
ข้อมูลไคลเอ็นต์สื่อทั่วไป 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_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 Unicast (ไม่รองรับ Multicast)
  • 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 ไม่ ไม่รองรับ Extractor
JPEG ใช่
ภาพเคลื่อนไหว JPEG ใช่ รองรับรูปภาพนิ่งและวิดีโอ
JPEG Ultra HDR ใช่ กลับไปใช้ SDR ก่อน Android 14 หรือในจอแสดงผลที่ไม่ใช่ HDR
PNG ใช่
WebP ใช่
HEIF/HEIC ใช่
รูปภาพเคลื่อนไหว HEIC ใช่
AVIF (พื้นฐาน) ใช่ ถอดรหัสได้ใน Android 14 ขึ้นไปเท่านั้น

รูปแบบคำบรรยายแบบสแตนด์อโลน

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