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

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

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

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

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

DASH

‫ExoPlayer תומך ב-DASH עם פורמטים שונים של קונטיינרים. צריך לבצע דה-מולטיפלקס לזרמי המדיה, כלומר להגדיר את הווידאו, האודיו והטקסט ברכיבי AdaptationSet נפרדים במניפסט DASH (CEA-608 הוא יוצא דופן, כפי שמתואר בטבלה שלמטה). גם הפורמטים של דגימות האודיו והווידאו שכלולים בקובץ צריכים להיות נתמכים (פרטים מופיעים בקטע פורמטים של דגימות).

תכונה נתמך תגובות
קונטיינרים
FMP4 כן רק סטרימינג של קובצי demux
WebM כן רק סטרימינג של קובצי demux
Matroska כן רק סטרימינג של קובצי demux
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" scheme: API 19+; ‫"cbcs" scheme: 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 נפרדים במניפסט של SmoothStreaming. בנוסף, צריך שתהיה תמיכה בפורמטים של דגימות האודיו והווידאו שכלולים בקובץ (פרטים נוספים זמינים בקטע פורמטים של דגימות).

תכונה נתמך תגובות
קונטיינרים
FMP4 כן רק סטרימינג של קובצי demux
כתוביות סמויות/כתוביות
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 בלבד
שליטה בשרת
עדכוני דלתא כן
חסימת טעינה מחדש של פלייליסט כן
חסימת טעינה של רמזים לטעינה מראש כן חוץ מטווחים של בייטים עם אורכים לא מוגדרים
הצגת מודעות
הוספת מודעות בהנחיית השרת (מודעות מעברון) באופן חלקי רק תוכן 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_ENABLE_CONSTANT_BITRATE_SEEKING להפעלת חיפוש משוער באמצעות הנחה של קצב העברת נתונים קבוע. הפונקציונליות הזו לא מופעלת כברירת מחדל. הדרך הכי פשוטה להפעיל את הפונקציונליות הזו לכל כלי החילוץ שתומכים בה היא באמצעות DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, כמו שמתואר כאן.

‫*** הפלט של כלי החילוץ של ספריית FLAC הוא אודיו גולמי, שאפשר לטפל בו במסגרת בכל רמות ה-API. הפלט של הספרייה ExoPlayer FLAC extractor הוא פריימים של אודיו FLAC, ולכן היא מסתמכת על FLAC decoder (לדוגמה, MediaCodecdecoder שמטפל ב-FLAC (נדרש מ-API ברמה 27), או הספרייה FFmpeg עם FLAC מופעל). ה-DefaultExtractorsFactory משתמש בחילוץ התוסף אם האפליקציה נבנתה באמצעות ספריית FLAC. אחרת, נעשה שימוש בכלי לחילוץ מספריית ExoPlayer.

RTSP

‫ExoPlayer תומך ב-RTSP בשידור חי ועל פי דרישה. בהמשך מפורטים הפורמטים הנתמכים של דוגמאות וסוגי הערוצים.

פורמטים נתמכים של דוגמאות

  • ‫H264 (תיאור המדיה ב-SDP חייב לכלול נתוני SPS/PPS במאפיין fmtp לצורך אתחול המפענח).
  • ‫AAC (עם ADTS bitstream).
  • AC3.

סוגי הרשתות הנתמכים

  • ‫RTP over UDP unicast (אין תמיכה ב-multicast).
  • ‫RTSP משולב, ‏ RTP over 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 יצירה
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 ואילך

פורמטים של כתוביות עצמאיות

‫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.