إنشاء سجلّ لتصحيح الخلل

لا يسجّل ExoPlayer سوى الأخطاء تلقائيًا. لتسجيل أحداث المشغّل، يجب استخدام EventLogger. الخاصة بك. يمكن أن يكون التسجيل الإضافي الذي يوفره مفيدًا ومعرفة ما يفعله المشغل، وكذلك لتصحيح أخطاء التشغيل المشكلات. ينفذ EventLogger AnalyticsListener، لذا فإن تسجيل مثيل باستخدام ExoPlayer أمر سهل:

Kotlin

player.addAnalyticsListener(EventLogger())

Java

player.addAnalyticsListener(new EventLogger());

أسهل طريقة لمراقبة السجلّ هي استخدام علامة تبويب Logcat في "استوديو Android". إِنْتَ اختيار تطبيقك كعملية قابلة للتصحيح من خلال اسم الحزمة ( androidx.media3.demo.main في حال استخدام التطبيق التجريبي) وإخبار Logcat لتسجيل هذا التطبيق فقط من خلال اختيار عرض التطبيق المحدد فقط. من المهم من الممكن إجراء مزيد من تصفية التسجيل باستخدام التعبير EventLogger|ExoPlayerImpl، للحصول على تسجيل فقط من EventLogger واللاعب نفسه.

بدلاً من استخدام علامة تبويب Logcat في "استوديو Android"، يمكنك استخدام وحدة التحكّم. بالنسبة مثال:

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]

يشير سطر السجل هذا إلى أن المشغل انتقل إلى درجة الدقة 640×360 للفيديو بتتبع ثلاث ثوانٍ إلى الوسائط.

اختيار برنامج فك الترميز

في معظم الحالات، يعرض 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]