ডিবাগ লগিং

ডিফল্ট হিসেবে, 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] [Canary:ON]
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]