פורמטים נתמכים

כשמגדירים את הפורמטים שבהם ExoPlayer תומך, חשוב לזכור ש'פורמטים של מדיה' מוגדרים בכמה רמות. מהרמה הנמוכה ביותר ועד הגבוהה ביותר, הן:

  • הפורמט של דגימות המדיה הנפרדות (כמו פריים של וידאו או פריים של אודיו). אלה פורמטים לדוגמה. חשוב לזכור שקובץ וידאו טיפוסי יכיל מדיה בשני פורמטים לדוגמה לפחות: אחד לווידאו (לדוגמה, H.264) ואחד לאודיו (לדוגמה, AAC).
  • הפורמט של הקונטיינר שמכיל את דגימות המדיה ואת המטא-נתונים המשויכים. אלה פורמטים של מאגרים. לקובץ מדיה יש פורמט מאגר אחד (לדוגמה, MP4), שמצוין בדרך כלל לפי סיומת הקובץ. חשוב לזכור שבפורמטים מסוימים של אודיו בלבד (לדוגמה, MP3), פורמט הדגימה ופורמט הקונטיינר עשויים להיות זהים.
  • טכנולוגיות של סטרימינג אדפטיבי כמו DASH, ‏ SmoothStreaming ו-HLS. אלה לא פורמטים של מדיה כשלעצמם, אבל עדיין צריך להגדיר את רמת התמיכה של ExoPlayer.

בקטעים הבאים מפורטת התמיכה של ExoPlayer בכל רמה, מהגבוהה ביותר ועד הנמוכה ביותר. בשני הקטעים האחרונים מוסבר על התמיכה בפורמטים של כתוביות עצמאיות ועל הפעלת סרטונים באיכות HDR.

סטרימינג דינמי

DASH

ExoPlayer תומך ב-DASH עם כמה פורמטים של קונטיינרים. צריך לבצע ניתוק של שידורי המדיה, כלומר צריך להגדיר את הווידאו, האודיו והטקסט באלמנטים נפרדים של AdaptationSet במניפסט 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 נפרדים במניפסט של 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_ENABLE_CONSTANT_BITRATE_SEEKING שמאפשרים להפעיל חיפוש משוער על סמך הנחה לגבי קצב נתונים קבוע. הפונקציונליות הזו לא מופעלת כברירת מחדל. הדרך הפשוטה ביותר להפעיל את הפונקציונליות הזו לכל ה-extractors שתומכים בה היא להשתמש ב-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 unicast (אין תמיכה ב-multicast).
  • 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 לא אין תמיכה ב-Extractor
JPEG כן
JPEG Motion Photo כן תמונות וסרטונים נתמכים
JPEG Ultra HDR כן חזרה ל-SDR לפני Android 14 או במסכים ללא HDR
PNG כן
WebP כן
HEIF/HEIC כן
תמונה עם תנועה בפורמט HEIC באופן חלקי יש תמיכה רק בתמונות סטילס*
AVIF (baseline) כן פענוח ב-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 מטפל בחילוץ של סרטוני HDR (טווח דינמי גבוה) בקונטיינרים שונים, כולל Dolby Vision ב-MP4 ו-HDR10+ ב-Matroska/WebM. פענוח ותצוגה של תוכן HDR תלויים בתמיכה בפלטפורמה ובמכשיר Android. במאמר הפעלת סרטוני HDR מוסבר איך בודקים את היכולות של המכשיר לפענח או להציג HDR, ואילו מגבלות יש לתמיכה ב-HDR בגרסאות השונות של Android.

כשמפעילים סטרימינג HDR שדורש תמיכה בפרופיל קודק מסוים, הבורר MediaCodec שמוגדר כברירת מחדל ב-ExoPlayer יבחר מקודד שתומך בפרופיל הזה (אם הוא זמין), גם אם מקודד אחר של אותו סוג MIME שלא תומך בפרופיל הזה מופיע גבוה יותר ברשימת הקודקים. כתוצאה מכך, יכול להיות שייבחר מקודד תוכנה במקרים שבהם הסטרימינג חורג מהיכולות של מקודד חומרה לאותו סוג MIME.