ثبت اشکال زدایی

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

کاتلین

player.addAnalyticsListener(EventLogger())

جاوا

player.addAnalyticsListener(new EventLogger());

ساده ترین راه برای مشاهده گزارش، استفاده از تب logcat اندروید استودیو است. می‌توانید برنامه‌تان را به‌عنوان فرآیند قابل اشکال‌زدایی با نام بسته (در صورت استفاده از برنامه آزمایشی androidx.media3.demo.main ) انتخاب کنید و به برگه logcat بگویید که فقط برای آن برنامه با انتخاب show only select application وارد سیستم شود. این امکان وجود دارد که لاگ را با عبارت EventLogger|ExoPlayerImpl بیشتر فیلتر کنید تا فقط از EventLogger و خود پخش کننده لاگ دریافت کنید.

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

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]

در این مثال پخش 0.93 ثانیه پس از آماده شدن پخش کننده شروع می شود. کاربر پخش را پس از 9.4 ثانیه متوقف می کند و یک ثانیه بعد در 10.4 ثانیه پخش را از سر می گیرد. پخش ده ثانیه بعد در 20.4 ثانیه به پایان می رسد. عناصر متداول درون پرانتز عبارتند از:

  • [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]