תצוגה מקדימה של עריכות באמצעות CompositionPlayer

ספריית Jetpack Media3 מספקת את CompositionPlayer API, הטמעה חזקה של Player לתצוגה מקדימה של עריכות וידאו בזמן אמת. אם האפליקציה מאפשרת למשתמשים לערוך סרטונים, למשל להוסיף אפקטים, לחתוך או לשלב כמה פריטי מדיה, CompositionPlayer עוזרת להציג תצוגה מקדימה מדויקת של הפלט. האפשרות הזו יכולה להיות שימושית במקרים שבהם לא צריך לשמור את העריכות שבוצעו, או כדי לוודא שהעריכות הוגדרו כמו שרציתם לפני שאתם מאשרים אותן בסרטון הסופי לייצוא.

מה זה CompositionPlayer?

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

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

CompositionPlayer מול ExoPlayer

גם CompositionPlayer וגם ExoPlayer הם הטמעות של Player ב-Media3, אבל הם מותאמים לתרחישי שימוש שונים:

Feature

CompositionPlayer

ExoPlayer

קלט מדיה

מקבל אובייקט Composition יחיד, שיכול לכלול כמה מופעים של EditedMediaItem עם אפקטים לכל פריט.

מקבל פריט MediaItem יחיד או פלייליסט של מופעים של MediaItem.

ציר הזמן

ציר הזמן והמשך מבוססים על הקומפוזיציה כולה.

ציר הזמן והמשך תואמים ל-MediaItem שמופעל כרגע.

אפקטים

האפקטים מוגדרים בתוך הרכיב Composition ואפשר להחיל אותם על רכיב EditedMediaItem בודד או על כל הרכיב Composition.

האפקטים מוגדרים במופע ExoPlayer עצמו באמצעות setVideoEffects(), וכל אפקט מוחל בנפרד על כל פריט בפלייליסט.

במילים אחרות, CompositionPlayer הכי שימושי כשצריך לעבד Composition מורכב של מדיה ואפקטים, בדרך כלל בהקשר של עריכה. אפשר להשתמש ב-ExoPlayer להפעלה לשימוש כללי של תוכן אודיו או וידאו, או לתצוגה מקדימה של עריכות של נכס יחיד באמצעות setVideoEffects().

CompositionPlayer לתצוגה מקדימה

כדי לשלב את CompositionPlayer באפליקציה, צריך לבצע כמה פעולות חשובות. קודם, משתמשים בתבנית Builder כדי ליצור מופע של CompositionPlayer, ואז מגדירים את Composition להפעלה:

val compositionPlayer = CompositionPlayer.Builder(context).build()
compositionPlayer.setComposition(composition)
compositionPlayer.prepare()
compositionPlayer.play()

הוראות ליצירת Composition מפורטות בקטע יצירת Composition.

שימו לב: מאחר שהמחלקה CompositionPlayer מטמיעה את הממשק Player, אפשר להגדיר את פלט היעד ולשלוט בנגן באמצעות שיטות סטנדרטיות של Player.

טיפול בשגיאות

מצרפים מופע של Player.Listener אל CompositionPlayer כדי להגיב לאירועי הפעלה ולשגיאות. הקריאה החוזרת onPlayerError() תציג גם בעיות שנובעות מרכיבים ספציפיים לעריכה, כמו Composition או VideoGraph.Factory. פרטים נוספים זמינים במאמרי העזרה בנושא אירועים של נגן.

שיקולים חשובים

כדאי לזכור כמה תכונות ומגבלות כשמשתמשים ב-CompositionPlayer:

  • למרות ש-CompositionPlayer מבוסס על הממשק של Player, חלק מההתנהגויות שלו שונות מאלה של ExoPlayer, כי הוא מסתמך על Composition להפעלה. לדוגמה, CompositionPlayer תומך רק בהגדרת מצב הפעלה חוזרת ל-REPEAT_MODE_OFF או ל-REPEAT_MODE_ALL.
  • כברירת מחדל, CompositionPlayer משתמש ב-SingleInputVideoGraph.Factory, אבל אם הקומפוזיציה משתמשת ביותר מרצף אחד עם פריטי תמונה או וידאו, צריך להשתמש ב-setVideoGraphFactory() כשיוצרים את מופע CompositionPlayer כדי להשתמש ב-MultipleInputVideoGraph.Factory במקום זאת. הערך SingleInputVideoGraph.Factory מספיק אם רק לרצף אחד יש פריטי תמונה או וידאו, ולשאר יש רק פריטי אודיו.
  • לכל פריטי המדיה ביצירה צריך להיות משך זמן מוגדר במפורש, באמצעות התג MediaItem.Builder.setImageDurationMs() לתמונות או באמצעות התג EditedMediaItem.Builder.setDurationUs() לאודיו או לסרטונים.

התרחישים הבאים נתמכים:

  • תצוגה מקדימה של נכס יחיד.
  • תצוגה מקדימה של רצף יחיד (כלומר, פריטי מדיה עוקבים).
  • תצוגה מקדימה של רצף סרטונים יחיד + רצף אודיו יחיד (לדוגמה, אודיו ברקע).

אנחנו עובדים כרגע על התרחישים הבאים:

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

בקשות להוספת תכונות

אם יש לכם בקשות להוספת תכונות או משוב לגבי CompositionPlayer, תוכלו להגיש בעיה במאגר Media3 ב-GitHub.