ניפוי באגים ביומן

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

Kotlin

player.addAnalyticsListener(EventLogger())

Java

player.addAnalyticsListener(new EventLogger());

כדי לצפות ביומן, משתמשים בכרטיסייה logcat ב-Android Studio. אתם יכולים לבחור את האפליקציה כתהליך שניתן לבצע בו ניפוי באגים לפי שם החבילה (androidx.media3.demo.main אם אתם משתמשים באפליקציית ההדגמה) ולהגדיר לכרטיסייה logcat לתעד ביומן רק את האפליקציה הזו, על ידי בחירה באפשרות show only selected application (הצגת האפליקציה שנבחרה בלבד). אפשר לסנן עוד יותר את הרישום ביומן באמצעות הביטוי EventLogger|ExoPlayerImpl, כדי לקבל רק רישום ביומן מ-EventLogger ומהנגן עצמו.

במקום להשתמש בכרטיסייה logcat ב-Android Studio, אפשר להשתמש במסוף. לדוגמה:

adb logcat EventLogger:* ExoPlayerImpl:* *:s

מידע על השחקן

הכיתה ExoPlayerImpl מספקת שתי שורות חשובות לגבי גרסת הנגן, המכשיר ומערכת ההפעלה שבהן האפליקציה פועלת, feature flags פעילים והמודולים של ExoPlayer שנטענו:

ExoPlayerImpl: Init 59a18ab [AndroidXMedia3/1.0.0-rc02] [flame, Pixel 4, Google, 33] [Canary:ON]
ExoPlayerImpl: Release 59a18ab [AndroidXMedia3/1.0.0-rc02] [flame, Pixel 4, Google, 33] [media3.common, media3.datasource, media3.ui, media3.exoplayer, media3.decoder, media3.exoplayer.dash, media3.extractor]

מצב ההפעלה

שינויים במצב הנגן מתועדים בשורות כאלה:

EventLogger: playWhenReady [eventTime=0.00, mediaPos=0.00, window=0, true, USER_REQUEST]
EventLogger: state [eventTime=0.01, mediaPos=0.00, window=0, BUFFERING]
EventLogger: state [eventTime=0.93, mediaPos=0.00, window=0, period=0, READY]
EventLogger: isPlaying [eventTime=0.93, mediaPos=0.00, window=0, period=0, true]
EventLogger: playWhenReady [eventTime=9.40, mediaPos=8.40, window=0, period=0, false, USER_REQUEST]
EventLogger: isPlaying [eventTime=9.40, mediaPos=8.40, window=0, period=0, false]
EventLogger: playWhenReady [eventTime=10.40, mediaPos=8.40, window=0, period=0, true, USER_REQUEST]
EventLogger: isPlaying [eventTime=10.40, mediaPos=8.40, window=0, period=0, true]
EventLogger: state [eventTime=20.40, mediaPos=18.40, window=0, period=0, ENDED]
EventLogger: isPlaying [eventTime=20.40, mediaPos=18.40, window=0, period=0, false]

בדוגמה הזו, ההפעלה מתחילה 0.93 שניות אחרי שהנגן מוכן. המשתמש משהה את ההפעלה אחרי 9.4 שניות, וממשיך את ההפעלה שנייה אחת לאחר מכן, ב-10.4 שניות. ההפעלה מסתיימת עשר שניות לאחר מכן, ב-20.4 שניות. הרכיבים הנפוצים בסוגריים המרובעים הם:

  • ‫[eventTime=float]: הזמן שעבר מאז שהנגן נוצר.
  • ‫[mediaPos=float]: מיקום ההפעלה הנוכחי.
  • ‫[window=int]: האינדקס של החלון הנוכחי.
  • ‫[period=int]: התקופה הנוכחית בחלון הזה.

הרכיבים האחרונים בכל שורה מציינים את הערך של המצב שמדווח.

טראקים של מדיה

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

EventLogger: tracks [eventTime=0.30, mediaPos=0.00, window=0, period=0,
EventLogger:   group [
EventLogger:     [X] Track:0, id=133, mimeType=video/avc, bitrate=261112, codecs=avc1.4d4015, res=426x240, fps=30.0, supported=YES
EventLogger:     [X] Track:1, id=134, mimeType=video/avc, bitrate=671331, codecs=avc1.4d401e, res=640x360, fps=30.0, supported=YES
EventLogger:     [X] Track:2, id=135, mimeType=video/avc, bitrate=1204535, codecs=avc1.4d401f, res=854x480, fps=30.0, supported=YES
EventLogger:     [X] Track:3, id=160, mimeType=video/avc, bitrate=112329, codecs=avc1.4d400c, res=256x144, fps=30.0, supported=YES
EventLogger:     [ ] Track:4, id=136, mimeType=video/avc, bitrate=2400538, codecs=avc1.4d401f, res=1280x720, fps=30.0, supported=NO_EXCEEDS_CAPABILITIES
EventLogger:   ]
EventLogger:   group [
EventLogger:     [ ] Track:0, id=139, mimeType=audio/mp4a-latm, bitrate=48582, codecs=mp4a.40.5, channels=2, sample_rate=22050, supported=YES
EventLogger:     [X] Track:1, id=140, mimeType=audio/mp4a-latm, bitrate=127868, codecs=mp4a.40.2, channels=2, sample_rate=44100, supported=YES
EventLogger:   ]
EventLogger: ]

בדוגמה הזו, הנגן בחר ארבעה מתוך חמשת הטראקים הזמינים של הווידאו. הטראק החמישי של הסרטון לא נבחר כי הוא חורג מהיכולות של המכשיר, כפי שמצוין ב-supported=NO_EXCEEDS_CAPABILITIES. הנגן מתאים את עצמו לטראקים של הסרטונים שנבחרו במהלך ההפעלה. כשהנגן עובר מטראק אחד לאחר, הפעולה מתועדת בשורה כמו זו:

EventLogger: downstreamFormat [eventTime=3.64, mediaPos=3.00, window=0, period=0, id=134, mimeType=video/avc, bitrate=671331, codecs=avc1.4d401e, res=640x360, fps=30.0]

שורת היומן הזו מציינת שהנגן עבר לטראק הווידאו ברזולוציה של 640x360 שלוש שניות אחרי תחילת המדיה.

בחירת מפענח

ברוב המקרים, ExoPlayer מעבד מדיה באמצעות MediaCodec שנרכש מהפלטפורמה הבסיסית. כשמפענח מופעל, הפעולה מתועדת בשורות כמו אלה:

EventLogger: videoDecoderInitialized [0.77, 0.00, window=0, period=0, video, OMX.qcom.video.decoder.avc]
EventLogger: audioDecoderInitialized [0.79, 0.00, window=0, period=0, audio, OMX.google.aac.decoder]