اختبار المصنّع الأصلي للجهاز

يُستخدَم ExoPlayer من قِبل عدد كبير من تطبيقات Android. بصفتك مصنّعًا أصليًا، لضمان عمل ExoPlayer بشكل صحيح على الأجهزة الجديدة إصدارات أنظمة أساسية جديدة للأجهزة الحالية. توضّح هذه الصفحة التوافق اختبارات ننصحك بإجرائها قبل شحن جهاز أو منصة عبر الهواء واجهت بعض أوضاع الإخفاق الشائعة عند تشغيلها.

إجراء الاختبارات

لإجراء اختبارات تشغيل ExoPlayer، تحقق أولاً من أحدث إصدار من ExoPlayer من GitHub. يمكنك بعد ذلك إجراء الاختبارات من سطر الأوامر أو "استوديو Android".

سطر الأوامر

من الدليل الجذر، أنشئ اختبارات التشغيل وثبِّتها:

./gradlew :test-exoplayer-playback:installDebug

بعد ذلك، نفِّذ اختبارات التشغيل في حزمة GTS:

adb shell am instrument -w -r -e debug false \
  -e package androidx.media3.test.exoplayer.playback.gts \
  androidx.media3.test.exoplayer.playback.test/androidx.test.runner.AndroidJUnitRunner

تظهر نتائج الاختبار في STDOUT.

استوديو Android

افتح مشروع ExoPlayer وانتقِل إلى وحدة "playbacktests" وانقر بزر الماوس الأيمن. في مجلد gts ونفِّذ الاختبارات. تظهر نتائج الاختبار في قسم Android Studio تشغيل النافذة.

أوضاع الإخفاق الشائعة

مصادفة بعض أوضاع الإخفاق الشائعة عند تشغيل ExoPlayer تم وصف الاختبار أدناه، بالإضافة إلى السبب الجذري المحتمل في كل حالة. أر ستتم إضافته إلى هذه القائمة عند اكتشاف المزيد من أوضاع الإخفاق.

الطابع الزمني غير متوقع للعرض المخزن المؤقت للفيديو

سيحتوي Logcat على خطأ مشابه لما يلي:

Caused by: java.lang.IllegalStateException: Expected to dequeue video buffer
with presentation timestamp: 134766000. Instead got: 134733000 (Processed
buffers since last flush: 2242).

يحدث هذا الخطأ في أغلب الأحيان عندما يتم اختبار برنامج فك ترميز الفيديو بشكل غير صحيح. تجاهل الموارد الاحتياطية أو إدخالها أو إعادة ترتيبها. في المثال أعلاه، قد يكون الاختبار من المتوقع أن يتم إزالة المخزن المؤقت في قائمة الانتظار بالطابع الزمني للعرض التقديمي 134766000 من MediaCodec.dequeueOutputBuffer، ولكن تم اكتشاف أنه تم إزالة المخزن المؤقت من قائمة الانتظار باستخدام الطابع الزمني للعرض التقديمي 134733000 بدلاً من ذلك. ننصحك بمراجعة تنفيذ برنامج فك الترميز عند مواجهة هذا العطل، وخصوصًا أنه التعامل بشكل صحيح مع مفاتيح تبديل الدقة التكيُّفية بدون تجاهل أي مخازن مؤقتة

تم انخفاض عدد كبير جدًا من الموارد الاحتياطية.

سيحتوي Logcat على خطأ مشابه لما يلي:

junit.framework.AssertionFailedError: Codec(DashTest:Video) was late decoding:
200 buffers. Limit: 25.

يمثل هذا الإخفاق مشكلة في الأداء، حيث تم تحديد وفك ترميز عدد كبير من الموارد الاحتياطية. في المثال أعلاه، إسقاط ExoPlayer 200 مورد احتياطي لأنه تأخرت عند إزالتها من قائمة الانتظار، لإجراء اختبار وتفرض حدًا أقصى للعدد هو 25. والسبب الأكثر وضوحًا هو أن برنامج فك ترميز الفيديو الموارد الاحتياطية لفك الترميز بطيئة جدًا. إذا حدثت حالات الإخفاق فقط لمجموعة فرعية من الاختبارات التي تشغل محتوى Widevine المحمي، فمن المحتمل أن تستخدم عمليات النظام الأساسي لفك تشفير المخزن المؤقت بطيئة للغاية. وننصحك بالتحقق من أداء هذه العناصر، والنظر في ما إذا كان يمكن إجراء أي تحسينات لزيادة السرعة معهم.

تعذّرت مصادقة النافذة الأصلية.

سيحتوي Logcat على خطأ مشابه لما يلي:

SurfaceUtils: native window could not be authenticated
ExoPlayerImplInternal: Internal runtime error.
ExoPlayerImplInternal: android.media.MediaCodec$CodecException: Error 0xffffffff

يشير هذا الخطأ إلى تعذُّر ضبط الأمان بشكل صحيح في النظام الأساسي علامة البت.

انتهت مهلة الاختبار

سيحتوي Logcat على خطأ مشابه لما يلي:

AssertionFailedError: Test timed out after 300000 ms.

وغالبًا ما يحدث هذا الفشل بسبب ضعف الاتصال بالشبكة أثناء الاختبار. الجري. إذا كان الاتصال بالشبكة جيدًا في الجهاز، يمكن. أن الاختبار يتعثر في الاتصال بأحد مكونات النظام الأساسي (مثل MediaCodec أو MediaDrm أو AudioTrack). فحص حزم الاتصال في في عملية الاختبار للتأكد مما إذا كان الأمر كذلك.