פתרון בעיות


למה אין לי גישה לקבצים מקומיים באפליקציית ההדגמה?

אכיפת נפח אחסון ייעודי לאפליקציות מ-Android 11 (רמת API ‏30) מונעת גישה ישירה למערכת הקבצים. במהלך הפיתוח, אפשר לגשת לקבצים מקומיים באמצעות בדיקה ידנית. לשם כך, צריך להוסיף את ההרשאה לניהול אחסון חיצוני בקובץ המניפסט של אפליקציית ההדגמה:

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

לאחר מכן מעניקים את ההרשאה באמצעות adb:

adb shell appops set --uid androidx.media3.demo.transformer \
    MANAGE_EXTERNAL_STORAGE allow

למה הייצוא נכשל במכשיר מסוים?

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

האם Transformer תומך בהמרת (או בהקלטה) מדיה מרחוק?

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

בתנאי רשת גרועים מאוד, יכול להיות שהייצוא ייכשל כי אחסון זמני (באפרינג) של מדיה מרוחקת למשך זמן ארוך מדי מפעיל בדיקות במרבב (muxer) שמיועדות לזהות שהצינור תקוע. אפשר לשנות את התנהגות ברירת המחדל באמצעות הגדרת maxDelayBetweenMuxerSamplesMs ב-Transformer.Builder:

Kotlin

Transformer.Builder(context).setMaxDelayBetweenMuxerSamplesMs(C.TIME_UNSET).build()

Java

new Transformer.Builder(context).setMaxDelayBetweenMuxerSamplesMs(C.TIME_UNSET).build();

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

האם Transformer תומך בקלט באיכות 8k?

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

מה הקשר בין Transformer לבין המרת קידוד למדיה שתואמת לפלטפורמה?

המרת קידוד למדיה תואמת היא תכונה של פלטפורמת Android, החל מ-Android 12 (רמת API‏ 31), שממירה מדיה באורך של עד דקה לפורמטים שנתמכים באפליקציה. אם בוחרים להצטרף לשימוש בתכונה הזו, קריאה של קובץ מדיה בפורמט לא תואם גורמת להמרת קידוד שלו על פי דרישה, והתוצאה נשמרת במטמון לפעולות קריאה מאוחרות יותר.

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

איך אפשר לקצר את זמן האחזור של הייצוא או להגדיל את קצב העברת הנתונים?

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

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