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

כברירת מחדל, 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 מופיעות שתי שורות חשובות לגבי גרסת הנגן, המכשיר ומערכת ההפעלה שבהם פועלת האפליקציה והמודולים של ExoPlayer שנטענו:

ExoPlayerImpl: Init 59a18ab [AndroidXMedia3/1.0.0-rc02] [flame, Pixel 4, Google, 33]
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]