כשמגדירים את הפורמטים שנתמכים ב-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.