আমি আজ খুশি

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

কোটলিন

player.addAnalyticsListener(EventLogger())

জাভা

player.addAnalyticsListener(new EventLogger());

লগ পর্যবেক্ষণ করার সবচেয়ে সহজ উপায় হল অ্যান্ড্রয়েড স্টুডিওর লগক্যাট ট্যাব ব্যবহার করা। আপনি প্যাকেজ নামের দ্বারা আপনার অ্যাপটিকে ডিবাগযোগ্য প্রক্রিয়া হিসাবে নির্বাচন করতে পারেন ( androidx.media3.demo.main যদি ডেমো অ্যাপ ব্যবহার করেন) এবং 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]

এই উদাহরণে প্লেব্যাক প্লেয়ার প্রস্তুত হওয়ার 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]