בדיקת OEM (יצרן ציוד מקורי)

מספר רב של אפליקציות ל-Android נמצא בשימוש ב-ExpoPlayer. כ-OEM, חשוב כדי להבטיח ש-ExoPlayer יפעל כראוי גם במכשירים חדשים פיתוחים חדשים של פלטפורמות למכשירים קיימים. בדף הזה מתוארת תאימות בדיקות שמומלץ להריץ לפני משלוח OTA של מכשיר או פלטפורמה, וגם חלק ממצבי הכשל הנפוצים שבהם נתקלים במהלך ההרצה שלהם.

הרצת הבדיקות

כדי להריץ בדיקות הפעלה של ExoPlayer, ראשית כדאי לבדוק את הגרסה האחרונה של ExoPlayer מ-GitHub. לאחר מכן תוכלו להריץ את הבדיקות משורת הפקודה או ב-Android Studio.

שורת הפקודה

מספריית השורש, יוצרים ומתקינים את בדיקות ההפעלה:

./gradlew :test-exoplayer-playback:installDebug

לאחר מכן, מריצים את בדיקות ההפעלה בחבילת GTS:

adb shell am instrument -w -r -e debug false \
  -e package androidx.media3.test.exoplayer.playback.gts \
  androidx.media3.test.exoplayer.playback.test/androidx.test.runner.AndroidJUnitRunner

תוצאות הבדיקה מופיעות ב-STDOUT.

סטודיו ל-Android

פותחים את פרויקט ExoPlayer, עוברים למודול playbacktests ולוחצים לחיצה ימנית בתיקייה gts ומריצים את הבדיקות. תוצאות הבדיקה מופיעות חלון הפעלה.

מצבים נפוצים של כשל

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

חותמת הזמן של יצירת מאגר הנתונים הזמני של הסרטון לא צפויה

ה-Logcat יכיל שגיאה שדומה לזו:

Caused by: java.lang.IllegalStateException: Expected to dequeue video buffer
with presentation timestamp: 134766000. Instead got: 134733000 (Processed
buffers since last flush: 2242).

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

יותר מדי מאגרי נתונים זמניים שנשלפו

ה-Logcat יכיל שגיאה שדומה לזו:

junit.framework.AssertionFailedError: Codec(DashTest:Video) was late decoding:
200 buffers. Limit: 25.

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

לא ניתן היה לאמת את חלון המקור

ה-Logcat יכיל שגיאה שדומה לזו:

SurfaceUtils: native window could not be authenticated
ExoPlayerImplInternal: Internal runtime error.
ExoPlayerImplInternal: android.media.MediaCodec$CodecException: Error 0xffffffff

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

פג הזמן הקצוב לבדיקה

ה-Logcat יכיל שגיאה שדומה לזו:

AssertionFailedError: Test timed out after 300000 ms.

לרוב הכשל הזה נגרם כתוצאה מקישוריות לא טובה לרשת במהלך הבדיקה לרוץ. אם החיבור של המכשיר לרשת טוב, יכול להיות שהבדיקה נתקעת בקריאה לרכיב פלטפורמה (כמו MediaCodec, MediaDrm או AudioTrack). לבדוק את מקבץ השיחות של השרשורים בתהליך הבדיקה כדי לקבוע אם זה המצב.