כברירת מחדל, ExoPlayer רושם ביומן רק שגיאות. כדי לרשום ביומן אירועים של נגן, אפשר להשתמש במחלקה EventLogger
class. הרישום הנוסף ביומן שהוא מספק יכול לעזור להבין מה השחקן עושה, וגם לנפות באגים בבעיות בהפעלת התוכן. EventLogger implements 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]