ডিবাগ লগিং

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

Kotlin

player.addAnalyticsListener(EventLogger())

জাভা

player.addAnalyticsListener(new EventLogger());

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

Android Studio-এর logcat ট্যাবের বিকল্প হিসেবে কনসোল ব্যবহার করা যেতে পারে। যেমন:

adb logcat EventLogger:* ExoPlayerImpl:* *:s

প্লেয়ারের তথ্য

ExoPlayerImpl ক্লাস প্লেয়ার ভার্সন সম্পর্কে দুটি গুরুত্বপূর্ণ লাইন ডেলিভার করে, অ্যাপটি যে ডিভাইস ও OS-এ চলছে এবং 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]

এই লগ লাইন থেকে বোঝা যাচ্ছে যে প্লেয়ারটি ৬৪০x৩৬০ রেজোলিউশনের ভিডিওতে পরিবর্তন করা হয়েছে মিডিয়া শুরু হওয়ার তিন সেকেন্ড পরে ট্র্যাক করা হয়েছে।

ডিকোডার বেছে নেওয়া

বেশিরভাগ ক্ষেত্রে, 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]