โดยค่าเริ่มต้น ExoPlayer จะบันทึกเฉพาะข้อผิดพลาด หากต้องการบันทึกเหตุการณ์ของเพลเยอร์ คุณสามารถใช้คลาส EventLogger
ได้ การบันทึกเพิ่มเติมที่ฟีเจอร์นี้มีให้จะเป็นประโยชน์ในการ
ทำความเข้าใจสิ่งที่ผู้เล่นกำลังทำ รวมถึงการแก้ไขข้อบกพร่องของปัญหาการเล่น
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 จะแสดงข้อมูลสำคัญ 2 บรรทัดเกี่ยวกับเวอร์ชันของเพลเยอร์
อุปกรณ์และระบบปฏิบัติการที่แอปทำงานอยู่ รวมถึงโมดูลของ 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 วินาที และกลับมาเล่นต่อหลังจากนั้น 1 วินาทีที่ 10.4 วินาที การเล่นจะสิ้นสุดในอีก 10 วินาทีต่อมาที่ 20.4 วินาที องค์ประกอบทั่วไปภายในวงเล็บเหลี่ยมมีดังนี้
[eventTime=float]: เวลาของนาฬิกาติดผนังนับตั้งแต่การสร้างผู้เล่น[mediaPos=float]: ตำแหน่งการเล่นปัจจุบัน[window=int]: ดัชนีหน้าต่างปัจจุบัน[period=int]: ระยะเวลาปัจจุบันในกรอบเวลานั้น
องค์ประกอบสุดท้ายในแต่ละบรรทัดจะระบุค่าของสถานะที่รายงาน
แทร็กสื่อ
ระบบจะบันทึกข้อมูลแทร็กเมื่อแทร็กที่พร้อมใช้งานหรือแทร็กที่เลือกมีการเปลี่ยนแปลง โดยจะเกิดขึ้นอย่างน้อย 1 ครั้งเมื่อเริ่มเล่น ตัวอย่างด้านล่างแสดงการติดตาม บันทึกสำหรับสตรีมแบบปรับอัตราการส่งข้อมูล
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: ]
ในตัวอย่างนี้ ผู้เล่นได้เลือกแทร็กวิดีโอ 4 รายการจาก 5 รายการที่มี
ระบบไม่ได้เลือกแทร็กวิดีโอที่ 5 เนื่องจากเกินความสามารถของอุปกรณ์ตามที่ระบุโดย 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 หลังจากเล่นสื่อไปแล้ว 3 วินาที
การเลือกตัวถอดรหัส
ในกรณีส่วนใหญ่ 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]