การบันทึกการแก้ไขข้อบกพร่อง

โดยค่าเริ่มต้น 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 รายการ ไม่ได้เลือกแทร็กวิดีโอที่ห้าเนื่องจากเกิน ความสามารถของอุปกรณ์ ตามที่ระบุโดย 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]