כדי לשלוט בהתנהגות של Transformer, אפשר להגדיר אפשרויות בממשק ה-API או להחליף חלקים מהפונקציונליות לחלוטין על ידי כתיבת הטמעות מותאמות אישית של ממשקים והעברתם. בדף הזה מפורטות כמה דוגמאות.
שליטה בהגדרת ה-Codec
כברירת מחדל, אם מקודד החומרה של המכשיר לא מקבל את רזולוציית הפלט המבוקשת, Transformer יחזור לרזולוציה נתמכת. לדוגמה, אפשר להגדיר את הרוחב והגובה של הפלט ב-Transformer כך שיהיו כפולה של 2 או 16, כפי שנדרש לעיתים קרובות על ידי מקודדי חומרה. אפשר להשבית את ההתנהגות הזו כדי שהכלי Transformer יציג שגיאה אם הוא לא יכול להפיק את רזולוציית הפלט הנדרשת:
Kotlin
transformerBuilder.setEncoderFactory( DefaultEncoderFactory.Builder(context).setEnableFallback(false).build() )
Java
transformerBuilder.setEncoderFactory( new DefaultEncoderFactory.Builder(context).setEnableFallback(false).build());
באופן דומה, DefaultEncoderFactory תומך גם בשימוש בהגדרות קידוד בהתאמה אישית עם האפשרות setRequestedVideoEncoderSettings.
אפשר גם להחליף לגמרי את המפעלים של המקודדים והמפענחים כדי לקבל שליטה מלאה על אופן ההגדרה של הקודקים.
ממקסרים בהתאמה אישית
אפשר להגדיר muxer בהתאמה אישית לכתיבת קובצי מדיה על ידי קריאה ל-Transformer.setMuxerFactory. לדוגמה, אם מטמיעים muxer משלכם ברמת האפליקציה, אפשר לכתוב wrapper שמטמיע את הממשק Muxer ואז להשתמש ב-setMuxerFactory כדי להחדיר אותו ל-Transformer.
אם המאחד המותאם אישית שלכם תומך בכתיבת חותמות זמן שליליות ברשימות עריכה של MP4, אתם צריכים לוודא שהפונקציה Muxer.Factory#supportsWritingNegativeTimestampsInEditList מחזירה את הערך true. כך Transformer יכול לבצע אופטימיזציות, כמו עריכות של חיתוך בלבד באמצעות רשימות עריכה של MP4, בלי צורך לקודד מחדש את הסרטון. התמיכה הזו כבר קיימת ב-InAppMp4Muxer שמוגדר כברירת מחדל.