আমি আজ খুশি

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

কোটলিন

player.addAnalyticsListener(EventLogger())

জাভা

player.addAnalyticsListener(new EventLogger());

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