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