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

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

Kotlin

player.addAnalyticsListener(EventLogger())

Java

player.addAnalyticsListener(new EventLogger());

הדרך הקלה ביותר לתעד את היומן היא באמצעות כרטיסיית Logcat ב-Android Studio. שלך יכול לבחור את האפליקציה שלך כתהליך שניתן לניפוי באגים לפי שם החבילה ( androidx.media3.demo.main אם משתמשים באפליקציית ההדגמה) ומדווחים ל-Logcat כדי לרשום רק את האפליקציה הזו, בוחרים באפשרות הצגת האפליקציה שנבחרה בלבד. זו להמשיך לסנן את הרישום ביומן באמצעות הביטוי 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]