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

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

Kotlin

player.addAnalyticsListener(EventLogger())

Java

player.addAnalyticsListener(new EventLogger());

أسهل طريقة لمراقبة السجل هي استخدام علامة التبويب logcat في Android Studio. يمكنك اختيار تطبيقك كعملية قابلة لتصحيح الأخطاء باستخدام اسم الحزمة ( androidx.media3.demo.main في حال استخدام التطبيق التجريبي) وطلب تسجيل علامة التبويب السجلّ لهذا التطبيق فقط من خلال اختيار عرض التطبيق المحدّد فقط. من الممكن إجراء فلترة إضافية لعملية التسجيل باستخدام التعبير 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]