डीबग लॉग करना

डिफ़ॉल्ट रूप से, ExoPlayer सिर्फ़ गड़बड़ियों को लॉग करता है. प्लेयर इवेंट को लॉग करने के लिए, EventLogger क्लास का इस्तेमाल किया जा सकता है. इससे मिलने वाली अतिरिक्त लॉगिंग की मदद से, यह समझा जा सकता है कि प्लेयर क्या कर रहा है. साथ ही, वीडियो चलाने से जुड़ी समस्याओं को डीबग किया जा सकता है. EventLogger, AnalyticsListener को लागू करता है, ताकि आप ExoPlayer के साथ इंस्टेंस को रजिस्टर कर सकें:

Kotlin

player.addAnalyticsListener(EventLogger())

Java

player.addAnalyticsListener(new EventLogger());

लॉग देखने के लिए, Android Studio के logcat टैब का इस्तेमाल करें. पैकेज के नाम (डेमो ऐप्लिकेशन का इस्तेमाल करने पर androidx.media3.demo.main) के हिसाब से, अपने ऐप्लिकेशन को डीबग करने लायक प्रोसेस के तौर पर चुना जा सकता है. साथ ही, logcat टैब को सिर्फ़ उस ऐप्लिकेशन के लिए लॉग करने के लिए कहा जा सकता है. इसके लिए, सिर्फ़ चुना गया ऐप्लिकेशन दिखाएं को चुनें. EventLogger|ExoPlayerImpl एक्सप्रेशन का इस्तेमाल करके, लॉगिंग को और फ़िल्टर किया जा सकता है. इससे, सिर्फ़ EventLogger और प्लेयर से लॉगिंग मिलेगी.

Android Studio के logcat टैब के बजाय, कंसोल का इस्तेमाल किया जा सकता है. उदाहरण के लिए:

adb logcat EventLogger:* ExoPlayerImpl:* *:s

खिलाड़ी की जानकारी

ExoPlayerImpl क्लास, प्लेयर के वर्शन के बारे में दो अहम लाइनें उपलब्ध कराती है. इनमें, ऐप्लिकेशन जिस डिवाइस और ओएस पर चल रहा है उसकी जानकारी, चालू फ़ीचर फ़्लैग, और ExoPlayer के लोड किए गए मॉड्यूल की जानकारी शामिल होती है:

ExoPlayerImpl: Init 59a18ab [AndroidXMedia3/1.0.0-rc02] [flame, Pixel 4, Google, 33] [Canary:ON]
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]