डिफ़ॉल्ट रूप से, ExoPlayer सिर्फ़ गड़बड़ियों को लॉग करता है. प्लेयर इवेंट को लॉग करने के लिए, EventLogger
क्लास का इस्तेमाल किया जा सकता है. इससे मिलने वाली अतिरिक्त लॉगिंग से, यह समझने में मदद मिलती है कि प्लेयर क्या कर रहा है. साथ ही, इससे वीडियो चलाने से जुड़ी समस्याओं को डीबग करने में भी मदद मिलती है. EventLogger
, AnalyticsListener
को लागू करता है. इसलिए, ExoPlayer
के साथ किसी इंस्टेंस को रजिस्टर करना आसान है:
Kotlin
player.addAnalyticsListener(EventLogger())
Java
player.addAnalyticsListener(new EventLogger());
लॉग को देखने का सबसे आसान तरीका, Android Studio के logcat टैब का इस्तेमाल करना है. पैकेज के नाम (androidx.media3.demo.main
, अगर डेमो ऐप्लिकेशन का इस्तेमाल किया जा रहा है) के हिसाब से, अपने ऐप्लिकेशन को डीबग की जा सकने वाली प्रोसेस के तौर पर चुना जा सकता है. साथ ही, सिर्फ़ चुने गए ऐप्लिकेशन को दिखाएं को चुनकर, logcat टैब को सिर्फ़ उस ऐप्लिकेशन के लिए लॉग करने के लिए कहा जा सकता है. EventLogger
और प्लेयर से सिर्फ़ लॉगिंग पाने के लिए, EventLogger|ExoPlayerImpl
एक्सप्रेशन की मदद से लॉगिंग को और भी फ़िल्टर किया जा सकता है.
Android Studio के logcat टैब का इस्तेमाल करने के बजाय, कंसोल का इस्तेमाल किया जा सकता है. जैसे:
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 सेकंड पर वीडियो को फिर से चलाता है. प्लेबैक 10 सेकंड बाद 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]