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

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

کاتلین

player.addAnalyticsListener(EventLogger())

جاوا

player.addAnalyticsListener(new EventLogger());

آسان‌ترین راه برای مشاهده گزارش استفاده از برگه logcat در Android Studio است. می‌توانید برنامه خود را به‌عنوان فرایند اشکال‌زدایی با نام بسته انتخاب کنید (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]
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]