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

כשמגדירים את הפורמטים שנתמכים ב-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': 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 נפרדים במניפסט של 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 סטרימינג בפורמטים הבאים של מאגרי נתונים: בנוסף, הפורמטים של דגימות האודיו והווידאו שכלולים בקובץ צריכים להיות נתמכים (פרטים מופיעים בקטע פורמטים של דגימות). מידע על תמיכה במאגרי תמונות ובפורמטים שלהן זמין במאמר בנושא תמונות Google.

פורמט מאגר נתמך תגובות
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 (לדוגמה, מפענח MediaCodec שמטפל ב-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 לא אין תמיכה ב-Extractor
JPEG כן
תמונה דינמית בפורמט JPEG כן תמונת סטילס וסרטון נתמכים
JPEG Ultra HDR כן ההמרה חוזרת ל-SDR בגרסאות קודמות ל-Android 14 או במסכים ללא HDR
PNG כן
WebP כן
HEIF/HEIC כן
תמונה עם תנועה בפורמט HEIC כן
‫AVIF (ערך הבסיס) כן הפענוח מתבצע רק ב-Android מגרסה 14 ואילך

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

‫ExoPlayer תומך בקובצי כתוביות עצמאיים במגוון פורמטים. אפשר להעלות קובצי כתוביות בשיטת side-loading כמו שמתואר בדף הפריטים של המדיה.

פורמט מאגר נתמך סוג 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.