আমি আজ খুশি

ডিফল্টরূপে, ExoPlayer শুধুমাত্র ত্রুটি লগ করে। প্লেয়ার ইভেন্ট লগ করার জন্য, EventLogger ক্লাস ব্যবহার করা যেতে পারে। এটি যে অতিরিক্ত লগিং প্রদান করে তা প্লেয়ার কী করছে তা বোঝার জন্য এবং প্লেব্যাক সমস্যাগুলি ডিবাগ করার জন্য সহায়ক হতে পারে। EventLogger AnalyticsListener প্রয়োগ করে, তাই ExoPlayer সাথে একটি ইনস্ট্যান্স নিবন্ধন করা সহজ:

কোটলিন

player.addAnalyticsListener(EventLogger())

জাভা

player.addAnalyticsListener(new EventLogger());

লগ পর্যবেক্ষণ করার সবচেয়ে সহজ উপায় হল Android Studio এর logcat ট্যাব ব্যবহার করা। আপনি প্যাকেজের নাম ( androidx.media3.demo.main যদি ডেমো অ্যাপ ব্যবহার করেন) দিয়ে আপনার অ্যাপটিকে ডিবাগেবল প্রক্রিয়া হিসেবে নির্বাচন করতে পারেন এবং show only selected application নির্বাচন করে logcat ট্যাবকে শুধুমাত্র সেই অ্যাপের জন্য লগ করতে বলতে পারেন। EventLogger|ExoPlayerImpl অভিব্যক্তি ব্যবহার করে লগিং আরও ফিল্টার করা সম্ভব, যাতে EventLogger এবং প্লেয়ার থেকে শুধুমাত্র লগিং পাওয়া যায়।

অ্যান্ড্রয়েড স্টুডিওর লগক্যাট ট্যাব ব্যবহারের বিকল্প হল কনসোল ব্যবহার করা। উদাহরণস্বরূপ:

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]

এই উদাহরণে প্লেয়ার প্রস্তুত হওয়ার ০.৯৩ সেকেন্ড পরে প্লেব্যাক শুরু হয়। ব্যবহারকারী ৯.৪ সেকেন্ড পরে প্লেব্যাক থামায় এবং এক সেকেন্ড পরে ১০.৪ সেকেন্ডে প্লেব্যাক পুনরায় শুরু করে। দশ সেকেন্ড পরে ২০.৪ সেকেন্ডে প্লেব্যাক শেষ হয়। বর্গাকার বন্ধনীর মধ্যে সাধারণ উপাদানগুলি হল:

  • [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]