כשמגדירים את הפורמטים שבהם ExoPlayer תומך, חשוב לזכור ש'פורמטים של מדיה' מוגדרים בכמה רמות. מהרמה הנמוכה ביותר ועד הגבוהה ביותר, הן:
- הפורמט של דגימות המדיה הנפרדות (כמו פריים של וידאו או פריים של אודיו). אלה פורמטים לדוגמה. חשוב לזכור שקובץ וידאו טיפוסי מכיל מדיה בשני פורמטים לדוגמה לפחות: אחד לווידאו (לדוגמה, H.264) ואחד לאודיו (לדוגמה, AAC).
- הפורמט של הקונטיינר שמכיל את דגימות המדיה ואת המטא-נתונים המשויכים. אלה פורמטים של מאגרים. לקובץ מדיה יש פורמט מאגר אחד (לדוגמה, MP4), שמצוין בדרך כלל לפי סיומת הקובץ. חשוב לזכור שבפורמטים מסוימים של אודיו בלבד (לדוגמה, MP3), פורמט הדגימה ופורמט הקונטיינר עשויים להיות זהים.
- טכנולוגיות של סטרימינג דינמי, כמו DASH, SmoothStreaming ו-HLS. אלה לא פורמטים של מדיה כשלעצמם, אבל עדיין צריך להגדיר את רמת התמיכה של ExoPlayer.
בקטעים הבאים מפורטת התמיכה של ExoPlayer בכל רמה, מהגבוהה ביותר ועד הנמוכה ביותר. בשני הקטעים האחרונים מוסבר על התמיכה בפורמטים של כתוביות עצמאיות ועל הפעלת סרטונים באיכות HDR.
סטרימינג דינמי
DASH
ExoPlayer תומך ב-DASH עם כמה פורמטים של קונטיינרים. צריך לבצע ניתוק של שידורי המדיה, כלומר צריך להגדיר את הווידאו, האודיו והטקסט באלמנטים נפרדים של AdaptationSet
במניפסט DASH (CEA-608 הוא יוצא מן הכלל, כפי שמתואר בטבלה שבהמשך). צריך גם לתמוך בפורמטים של קטעי האודיו והווידאו שכלולים במודעה (פרטים מופיעים בקטע פורמטים של קטעי טעימות).
תכונה | נתמך | תגובות |
---|---|---|
קונטיינרים | ||
FMP4 | כן | רק שידורים שהופרדו לרכיבים |
WebM | כן | רק שידורים שהופרדו לרכיבים |
Matroska | כן | רק שידורים שהופרדו לרכיבים |
MPEG-TS | לא | אין תמיכה מתוכננת |
כתוביות /כתוביות 'closed captions' | ||
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' בלבד |
הוספת מודעות | ||
הפעלה במספר תקופות | כן | |
הטמעת מודעות מבוקרת על ידי שרת (xlinks) | לא | |
מודעות IMA בצד השרת ובצד הלקוח | כן | מדריך להוספת מודעות |
הפעלה בשידור חי | ||
הפעלה רגילה בשידור חי | כן | |
הפעלה של שידור חי ב-CMAF עם זמן אחזור קצר במיוחד | כן | |
Common Media Client Data (CMCD) | כן | מדריך להטמעת 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 | כן | |
חסימה של טעינת הפלייליסט מחדש | כן | |
חסימה של טעינת רמזים לטעינה מראש | כן | מלבד טווחי בייטים עם אורך לא מוגדר |
הוספת מודעות | ||
הטמעת מודעות מבוקרת על ידי שרת (מודעות מעברון) | באופן חלקי | רק 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
שמאפשרים להפעיל חיפוש משוער על סמך הנחה לגבי קצב העברת נתונים קבוע. הפונקציונליות הזו לא מופעלת כברירת מחדל. הדרך הפשוטה ביותר להפעיל את הפונקציונליות הזו לכל ה-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 ו-MPEG-H.
ספריית 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.