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

מספר רב של אפליקציות ל-Android נמצא בשימוש ב-ExoPlayer. כ-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 Studio

פותחים את פרויקט 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). תבדקו את מקבץ השיחות של השרשורים בתהליך הבדיקה כדי לקבוע אם זה המצב.