يسجّل ExoPlayer الأخطاء فقط تلقائيًا. لتسجيل أحداث اللاعبين، يمكن استخدام الفئة EventLogger. يمكن أن يكون التسجيل الإضافي الذي يوفّره مفيدًا في فهم ما يفعله المشغّل، وكذلك في تصحيح أخطاء التشغيل. EventLogger implements AnalyticsListener, so you can register an
instance with an 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] [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]
في هذا المثال، يبدأ التشغيل بعد 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]