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