ספריית 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.