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

בדף הפורמטים הנתמכים ב-ExoPlayer יש מבוא לפורמטים של מדיה באופן כללי. אותן מגבלות על טעינה, חילוץ ופענוח של סטרימינג חלות על Transformer, אבל Transformer לא תומך במודולים של מפענח תוכנה שצורפו ל-ExoPlayer.

‫Transformer מסתמך גם על MediaCodec לקידוד, וצריך לבצע מולטיפלקס, או mux, של קובצי מדיה של פלט, מה שמגביל את פורמטי הפלט הנתמכים. מידע נוסף על מגבלות הקידוד זמין במאמר בנושא רכיבי codec של וידאו ב-MediaCodec, ומגבלות שחלות על קובץ המדיה שנוצר זמינות במאמר בנושא MediaMuxer. הכלי להמרת פורמטים מוציא רק קובצי MP4.

כברירת מחדל, Transformer משתמש ב-MediaMuxer, אבל אפשר להשתמש ב-InAppMuxer שנמצא בשלבי פיתוח כדי לעקוף חלק מהמגבלות של MediaMuxer בנוגע למבנים של מסגרות הפניה ולפורמטים נתמכים של דוגמאות. בגרסה עתידית, המרבב שמוגדר כברירת מחדל יהפוך למרבב בתוך האפליקציה.

תמיכה בתמונות

הכלי Transformer משתמש ב-BitmapFactory כדי לטעון ולפענח את כל נכסי התמונות, ולכן הוא תומך בכל הפורמטים ש-BitmapFactory תומך בהם. לרשימת סוגי התמונות הנתמכים, אפשר לעיין במאמר בנושא תמיכה בתמונות. בפורמטים של כמה תמונות (למשל, קובצי GIF), אם משתמשים בתג DefaultAssetLoaderFactory, מוצג פריים אחד של תמונה מהקונטיינר.

פורמטים מיוחדים

רכיב ה-Transformer תומך בטיפול בקלט בפורמטים חדשים יותר של מדיה שמספקים תכונות מיוחדות בהשוואה לפורמטים רגילים.

שימוש בסרטוני HDR

יותר ויותר מכשירים תומכים עכשיו בצילום וידאו ב-HDR, ומאפשרים ליהנות מצבעים חיים ומדויקים יותר ומטווח בהירות רחב יותר.

הכלי Transformer תומך בעריכת סרטוני HDR מ-Android 13 (API ברמה 33) ואילך במכשירים עם תמיכה נדרשת בקידוד. כשעורכים סרטוני HDR, כל אפקטי הווידאו של GL צריכים לטפל ברכיבי צבע של נקודה צפה (floating point) ב-16 ביט ובמרחב הצבעים BT.2020. ‫HDR_MODE_KEEP_HDR הוא מצב ברירת המחדל כשיוצרים את Composition. אם אין תמיכה בעריכת HDR, רכיב ה-Transformer חוזר לשימוש ב-HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL.

המרת HDR ל-SDR, שנקראת גם מיפוי טונים, נתמכת מ-Android 10 (רמת API‏ 29) ואילך במכשירים עם תמיכה נדרשת בפענוח וב-OpenGL. האפשרות הזו שימושית כשמשתפים מדיה ב-HDR עם אפליקציות או שירותים אחרים שלא תומכים בהוספה של תוכן HDR. כדי להפעיל מיפוי טונים באמצעות קריאת OpenGL‏ setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) כשיוצרים את Composition. מ-Android 12 (רמת API‏ 31) ואילך, MediaCodec יש גם תמיכה במיפוי טונים במכשירים מסוימים, כולל בכל המכשירים שמותקנת בהם גרסת Android 13 ואילך שיכולים לצלם סרטוני HDR. כדי להפעיל מיפוי טונים באמצעות MediaCodec call setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC).

טיפול במדיה בהילוך איטי

סרטונים בהילוך איטי כוללים מטא-נתונים שמציינים את המהירות שבה כל קטע בשידור צריך להיות מוצג. השטחה היא תהליך של יצירת זרם וידאו חדש על סמך סרטון בהילוך איטי, אבל הקטעים מואצים או מואטים על סמך המטא-נתונים, כך שהם יופעלו בצורה נכונה גם בנגנים שלא חלים עליהם מטא-נתונים של הילוך איטי.

כדי לשטח זרמי הילוך איטי, משתמשים בשיטת ה-builder‏ setFlattenForSlowMotion ב-EditedMediaItem.

Kotlin

val editedMediaItem =
    EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build()
val transformer =
    Transformer.Builder(context).addListener(transformerListener).build()
transformer.start(editedMediaItem, outputPath)

Java

EditedMediaItem editedMediaItem =
    new EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build();
Transformer transformer =
    new Transformer.Builder(context).addListener(transformerListener).build();
transformer.start(editedMediaItem, outputPath);

כך תוכלו לתמוך בסרטונים בהילוך איטי בלי לדאוג לטיפול בפורמטים המיוחדים האלה. כל מה שצריך לעשות הוא לאחסן ולהפעיל את הגרסה המפושטת של הסרטון במקום הגרסה המקורית.