डिफ़ॉल्ट रूप से, 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 के लॉगकैट टैब की जगह, कंसोल का इस्तेमाल किया जा सकता है. इसके लिए उदाहरण:
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]