بشكلٍ تلقائي، يسجّل 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 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]
في هذا المثال، يبدأ التشغيل بعد 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]