گزارش‌گیری اشکال‌زدایی

به‌طور پیش‌فرض، ExoPlayer فقط خطاها را ثبت می‌کند. برای ثبت رویدادهای بازیکن، می‌توان از کلاس EventLogger استفاده کرد. گزارش‌گیری اضافی که ارائه می‌دهد می‌تواند برای درک آنچه پخش‌کننده انجام می‌دهد و همچنین برای اشکال‌زدایی مشکلات بازپخش مفید باشد. EventLogger AnalyticsListener را پیاده‌سازی می‌کند، بنابراین می‌توانید نمونه‌ای را با ExoPlayer ثبت کنید:

کاتلین

player.addAnalyticsListener(EventLogger())

جاوا

player.addAnalyticsListener(new EventLogger());

برای مشاهده گزارش، از برگه logcat در «استودیو Android» استفاده کنید. می‌توانید برنامه‌تان را به‌عنوان فرایند قابل‌اشکال‌زدایی براساس نام بسته انتخاب کنید (androidx.media3.demo.main اگر از برنامه نمایشی استفاده می‌کنید) و با انتخاب فقط برنامه انتخاب‌شده نشان داده شود به برگه logcat بگویید فقط برای آن برنامه گزارش‌گیری کند. می‌توانید با عبارت EventLogger|ExoPlayerImpl، ثبت گزارش را بیشتر فیلتر کنید تا فقط گزارش‌های EventLogger و خود پخش‌کننده را دریافت کنید.

یک جایگزین برای استفاده از برگه logcat در Android Studio، استفاده از کنسول است. برای مثال:

adb logcat EventLogger:* ExoPlayerImpl:* *:s

اطلاعات بازیکن

کلاس ExoPlayerImpl دو خط مهم درباره نسخه پخش‌کننده، دستگاه و سیستم‌عاملی که برنامه در آن اجرا می‌شود، پرچم‌های ویژگی فعال، و مدول‌های 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]

این خط گزارش نشان می‌دهد که پخش‌کننده سه ثانیه پس‌از شروع رسانه به قطعه ویدیویی با وضوح ۶۴۰×۳۶۰ تغییر کرده است.

انتخاب رمزگشا

در بیشتر موارد، 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]