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

เมื่อกำหนดรูปแบบที่ ExoPlayer รองรับ โปรดทราบว่า "รูปแบบสื่อ" กำหนดไว้ในหลายระดับ จากระดับต่ำสุดไปยัง สูงสุด ซึ่งได้แก่

  • รูปแบบของตัวอย่างสื่อแต่ละรายการ (เช่น เฟรมของวิดีโอหรือเฟรม ของรูปแบบเสียง) นี่เป็นรูปแบบตัวอย่าง โปรดทราบว่าไฟล์วิดีโอทั่วไปจะ มีสื่อในรูปแบบตัวอย่างอย่างน้อย 2 รูปแบบ ตัวเลือกหนึ่งสำหรับวิดีโอ (เช่น H.264) และ 1 ตัวสำหรับเสียง (เช่น AAC)
  • รูปแบบของคอนเทนเนอร์ที่เก็บตัวอย่างสื่อและเชื่อมโยง ข้อมูลเมตา นี่คือรูปแบบคอนเทนเนอร์ ไฟล์สื่อมีคอนเทนเนอร์เดียว (เช่น MP4) ซึ่งโดยทั่วไปจะระบุด้วยนามสกุลไฟล์ หมายเหตุ สำหรับรูปแบบเสียงอย่างเดียวบางรูปแบบ (เช่น MP3) ตัวอย่างและรูปแบบที่เก็บ อาจเหมือนกันก็ได้
  • เทคโนโลยีสตรีมมิงแบบปรับอัตโนมัติ เช่น DASH, SmoothStreaming และ HLS เหล่านี้ ไม่ใช่รูปแบบสื่อ แต่ยังจำเป็นต้องกำหนดสิ่งที่ ที่ ExoPlayer มอบให้

ส่วนต่อไปนี้จะอธิบายการรองรับ ExoPlayer ในแต่ละระดับ ตั้งแต่สูงสุดไปจนถึง ที่ต่ำที่สุด 2 ส่วนสุดท้ายอธิบายการรองรับรูปแบบคำบรรยายแบบสแตนด์อโลน และการเล่นวิดีโอ HDR

สตรีมมิงแบบปรับอัตโนมัติ

แดชบอร์ด

ExoPlayer รองรับ DASH ด้วยรูปแบบคอนเทนเนอร์หลายรูปแบบ สตรีมสื่อต้องเป็น demuxed ซึ่งหมายความว่าวิดีโอ เสียง และข้อความต้องได้รับการกำหนดแยกกัน องค์ประกอบ AdaptationSet ในไฟล์ Manifest ของ DASH (CEA-608 เป็นข้อยกเว้นเช่นเดียวกับ ดังที่อธิบายไว้ในตารางด้านล่าง) รูปแบบเสียงและวิดีโอตัวอย่างที่มีอยู่ต้อง (โปรดดู รูปแบบตัวอย่างเพื่อดูรายละเอียด)

ฟีเจอร์ รองรับ ความคิดเห็น
คอนเทนเนอร์
FMP4 ใช่ สตรีมที่ถอดรหัสเท่านั้น
WebM ใช่ สตรีมที่ถอดรหัสเท่านั้น
มาโทรสกา ใช่ สตรีมที่ถอดรหัสเท่านั้น
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+; "ลูกบาศก์" สคีม: API 25+
PlayReady SL2000 ใช่ Android TV, "cenc" สคีมเท่านั้น
คีย์เคลียร์คีย์ ใช่ API 21 ขึ้นไป, "cenc" สคีมเท่านั้น
การเล่นแบบสด
การเล่นแบบสดปกติ ใช่
การเล่นแบบสดของ CMAF ที่มีเวลาในการตอบสนองต่ำมาก ใช่
ข้อมูลไคลเอ็นต์สื่อทั่วไป (CMCD) ใช่ คู่มือการผสานรวม

สตรีมมิงแบบราบรื่น

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 ใช่
ข้อมูลเมตา
รหัส 3 ใช่
SCTE-35 ไม่
การปกป้องเนื้อหา
แบบ AES-128 ใช่
ตัวอย่าง AES-128 ไม่
Widevine ใช่ API 19+ (ชุดรูปแบบ "cenc") และ 25+ (ชุดรูปแบบ "cbcs")
PlayReady SL2000 ใช่ Android TV เท่านั้น
การควบคุมเซิร์ฟเวอร์
การอัปเดตเดลต้า ใช่
กำลังบล็อกการโหลดเพลย์ลิสต์ซ้ำ ใช่
บล็อกการโหลดคำแนะนำการโหลดล่วงหน้า ใช่ ยกเว้นไบต์เรนจ์ที่มีความยาวที่ระบุไม่ได้
การเล่นแบบสด
การเล่นแบบสดปกติ ใช่
HLS เวลาในการตอบสนองต่ำ (Apple) ใช่
HLS เวลาในการตอบสนองต่ำ (ชุมชน) ไม่
ข้อมูลไคลเอ็นต์สื่อทั่วไป (CMCD) ใช่ คู่มือการผสานรวม

รูปแบบคอนเทนเนอร์แบบโปรเกรสซีฟ

ExoPlayer จะเล่นสตรีมในรูปแบบคอนเทนเนอร์ต่อไปนี้ได้โดยตรง นอกจากนี้ยังต้องรองรับรูปแบบเสียงและวิดีโอตัวอย่างที่มีอยู่ด้วย (ดู ส่วนรูปแบบตัวอย่างเพื่อดูรายละเอียด) สำหรับการรองรับคอนเทนเนอร์รูปภาพและรูปแบบ โปรดดูที่ รูปภาพ

รูปแบบคอนเทนเนอร์ รองรับ ความคิดเห็น
MP4 ใช่
M4A ใช่
FMP4 ใช่
WebM ใช่
มาโทรสกา ใช่
MP3 ใช่ สตรีมบางสตรีมค้นหาได้โดยใช้อัตราบิตคงที่เท่านั้น**
Ogg ใช่ มี Vorbis, Opus และ FLAC
WAV ใช่
MPEG-TS ใช่
MPEG-PS ใช่
FLV ใช่ ไม่สามารถค้นหาได้*
ADTS (AAC) ใช่ สามารถค้นหาได้โดยใช้การกรอวิดีโอด้วยอัตราบิตคงที่เท่านั้น**
FLAC ใช่ การใช้ไลบรารี FLAC หรือเครื่องมือแยก FLAC ในไลบรารี ExoPlayer***
AMR ใช่ สามารถค้นหาได้โดยใช้การกรอวิดีโอด้วยอัตราบิตคงที่เท่านั้น**

* ไม่รองรับการกรอเนื่องจากคอนเทนเนอร์ไม่มีข้อมูลเมตา (เช่น ดัชนีตัวอย่าง) เพื่อช่วยให้มีเดียเพลเยอร์ค้นหาด้วยวิธีที่มีประสิทธิภาพ หากจำเป็นต้องกรอวิดีโอ เราขอแนะนำให้ใช้รูปแบบคอนเทนเนอร์ที่เหมาะสมกว่า

** เครื่องมือแยกข้อมูลเหล่านี้มี FLAG_ENABLE_CONSTANT_BITRATE_SEEKING Flag สำหรับ เปิดใช้งานการกรอวิดีโอโดยประมาณโดยใช้สมมติฐานเกี่ยวกับอัตราบิตคงที่ ช่วงเวลานี้ ฟังก์ชันการทำงานไม่ได้เปิดใช้งานโดยค่าเริ่มต้น วิธีที่ง่ายที่สุดในการดำเนินการนี้ ฟังก์ชันการทำงานของเครื่องมือแยกทุกส่วนที่รองรับการใช้งาน 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 (ไม่รองรับมัลติแคสต์)
  • RTSP แบบแทรกสลับ, RTP ผ่าน RTSP โดยใช้ TCP

รูปแบบตัวอย่าง

โดยค่าเริ่มต้น ExoPlayer จะใช้ตัวถอดรหัสแพลตฟอร์มของ Android ดังนั้น ฟังก์ชัน รูปแบบตัวอย่างจะขึ้นอยู่กับแพลตฟอร์มพื้นฐาน มากกว่า ExoPlayer โปรดดูที่รูปแบบสื่อที่รองรับสำหรับ เอกสารเกี่ยวกับรูปแบบตัวอย่างที่อุปกรณ์ Android รองรับ โปรดทราบว่า อุปกรณ์แต่ละเครื่องอาจรองรับรูปแบบอื่นๆ นอกเหนือจากที่แสดงไว้ด้วย

นอกจากตัวถอดรหัสแพลตฟอร์มของ Android แล้ว ExoPlayer ยังสามารถใช้ประโยชน์จาก ส่วนขยายตัวถอดรหัสซอฟต์แวร์ รหัสผ่านเหล่านี้ต้องสร้างขึ้นเองและรวมไว้ใน ที่ต้องการใช้ ตอนนี้เรามีเครื่องมือถอดรหัสซอฟต์แวร์ ห้องสมุดสำหรับ AV1 VP9 FLAC Opus และ FFmpeg

ไลบรารี FFmpeg

ไลบรารี FFmpeg รองรับ การถอดรหัสเสียงตัวอย่างรูปแบบต่างๆ คุณเลือกได้ว่า ตัวถอดรหัสที่รวมไว้เมื่อสร้างไลบรารีตามที่กำหนดไว้ใน README.md ของห้องสมุด ตารางต่อไปนี้จะแสดงการแมปจากรูปแบบเสียงตัวอย่างไปยัง ชื่อตัวถอดรหัส FFmpeg

ตัวอย่างรูปแบบ ชื่อตัวถอดรหัส
Vorbis Vorbis
Opus โอปัส
FLAC flac
ALAC Alac
PCM μ-law PCM Mulaw
กฎหมาย PCM 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 ใช่ รองรับภาพนิ่งและวิดีโอ
PNG ใช่
WebP ใช่
HEIF/HEIC ใช่
รูปภาพเคลื่อนไหว HEIC เพียงบางส่วน รองรับเฉพาะภาพนิ่งเท่านั้น*
AVIF (เกณฑ์พื้นฐาน) ใช่ ถอดรหัสใน Android 14 ขึ้นไปเท่านั้น

* ส่วนวิดีโอของภาพเคลื่อนไหว HEIC จะรับได้ด้วย MetadataRetriever และเล่นเป็นไฟล์แบบสแตนด์อโลน

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

ExoPlayer รองรับไฟล์คำบรรยายแบบสแตนด์อโลนในรูปแบบต่างๆ ชื่อรอง โหลดจากแหล่งที่ไม่รู้จักได้ตามที่อธิบายไว้ในหน้ารายการสื่อ

รูปแบบคอนเทนเนอร์ รองรับ ประเภท MIME
WebVTT ใช่ MimeTypes.TEXT_VTT
TTML / SMPTE-TT ใช่ MimeTypes.APPLICATION_TTML
SubRip ใช่ MimeTypesAPPLICATION_SUBRIP
SubStationAlpha (SSA/ASS) ใช่ ประเภท Mime TEXT_SSA

การเล่นวิดีโอ HDR

ExoPlayer จะจัดการกับการแยกวิดีโอ High Dynamic Range (HDR) ในหลายๆ ด้าน ซึ่งรวมถึง Dolby Vision ใน MP4 และ HDR10+ ใน Matroska/WebM กำลังถอดรหัส การแสดงเนื้อหา HDR ขึ้นอยู่กับการสนับสนุนจากแพลตฟอร์ม Android และ อุปกรณ์ โปรดดู การเล่นวิดีโอ HDR เพื่อดูข้อมูลเกี่ยวกับการตรวจสอบความสามารถในการถอดรหัส/การแสดงผล HDR และข้อจำกัดของ รองรับ HDR ใน Android ทุกเวอร์ชัน

เมื่อเปิดสตรีม HDR ที่ต้องมีการรองรับโปรไฟล์ตัวแปลงรหัสที่เฉพาะเจาะจง ตัวเลือก MediaCodec เริ่มต้นของ ExoPlayer จะเลือกตัวถอดรหัสที่รองรับ (หากมี) แม้ว่าจะมีการใช้ตัวถอดรหัสอื่นสำหรับ MIME ประเภทเดียวกันที่ ไม่สนับสนุนโปรไฟล์นั้นจะปรากฏขึ้นในลำดับที่สูงกว่าในรายการตัวแปลงรหัส ซึ่งอาจส่งผลให้ ในการเลือกตัวถอดรหัสซอฟต์แวร์ในกรณีที่สตรีมเกิน ความสามารถของตัวถอดรหัสฮาร์ดแวร์สำหรับ MIME ประเภทเดียวกัน