ডিফল্টরূপে, ExoPlayer শুধুমাত্র ত্রুটি লগ করে। প্লেয়ার ইভেন্ট লগ করার জন্য, EventLogger ক্লাস ব্যবহার করা যেতে পারে। এটি যে অতিরিক্ত লগিং প্রদান করে তা প্লেয়ার কী করছে তা বোঝার জন্য এবং প্লেব্যাক সমস্যাগুলি ডিবাগ করার জন্য সহায়ক হতে পারে। EventLogger AnalyticsListener প্রয়োগ করে, তাই ExoPlayer সাথে একটি ইনস্ট্যান্স নিবন্ধন করা সহজ:
কোটলিন
player.addAnalyticsListener(EventLogger())
জাভা
player.addAnalyticsListener(new EventLogger());
The easiest way to observe the log is using Android Studio's logcat tab . You can select your app as debuggable process by the package name ( androidx.media3.demo.main if using the demo app) and tell the logcat tab to log only for that app by selecting show only selected application . It's possible to further filter the logging with the expression EventLogger|ExoPlayerImpl , to get only logging from EventLogger and the player itself.
An alternative to using Android Studio's logcat tab is to use the console. For example:
adb logcat EventLogger:* ExoPlayerImpl:* *:s
খেলোয়াড়ের তথ্য
The ExoPlayerImpl class delivers two important lines about the player version, the device and OS the app is running on and the modules of ExoPlayer that have been loaded:
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]
প্লেব্যাক অবস্থা
Player state changes are logged in lines like these:
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]
এই উদাহরণে প্লেয়ার প্রস্তুত হওয়ার ০.৯৩ সেকেন্ড পরে প্লেব্যাক শুরু হয়। ব্যবহারকারী ৯.৪ সেকেন্ড পরে প্লেব্যাক থামায় এবং এক সেকেন্ড পরে ১০.৪ সেকেন্ডে প্লেব্যাক পুনরায় শুরু করে। দশ সেকেন্ড পরে ২০.৪ সেকেন্ডে প্লেব্যাক শেষ হয়। বর্গাকার বন্ধনীর মধ্যে সাধারণ উপাদানগুলি হল:
-
[eventTime=float]: The wall clock time since player creation. -
[mediaPos=float]: The current playback position. -
[window=int]: বর্তমান উইন্ডো সূচক। -
[period=int]: The current period in that window.
The final elements in each line indicate the value of the state being reported.
মিডিয়া ট্র্যাক
Track information is logged when the available or selected tracks change. This happens at least once at the start of playback. The example below shows track logging for an adaptive stream:
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]
This log line indicates that the player switched to the 640x360 resolution video track three seconds into the media.
ডিকোডার নির্বাচন
In most cases, ExoPlayer renders media using a MediaCodec acquired from the underlying platform. When a decoder is initialized, this is logged in lines like these:
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]