Pengujian OEM

ExoPlayer digunakan oleh banyak aplikasi Android. Sebagai OEM, untuk memastikan bahwa ExoPlayer berfungsi dengan benar baik di perangkat baru maupun di {i>build platform<i} baru untuk perangkat yang sudah ada. Halaman ini menjelaskan kompatibilitas pengujian yang kami rekomendasikan untuk dijalankan sebelum mengirimkan OTA perangkat atau platform, dan beberapa mode kegagalan yang biasa ditemui saat menjalankannya.

Menjalankan pengujian

Untuk menjalankan pengujian pemutaran ExoPlayer, periksa rilis terbaru dari ExoPlayer dari GitHub. Anda kemudian dapat menjalankan pengujian dari baris perintah atau Android Studio.

Command line

Dari direktori utama, bangun dan instal pengujian pemutaran:

./gradlew :test-exoplayer-playback:installDebug

Selanjutnya, jalankan pengujian pemutaran dalam paket 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

Hasil pengujian muncul di STDOUT.

Android Studio

Buka project ExoPlayer, buka modul playbacktests, klik kanan di folder gts dan jalankan pengujian. Hasil pengujian muncul di elemen Jendela Run.

Mode kegagalan umum

Beberapa mode kegagalan umum yang ditemukan saat menjalankan pemutaran ExoPlayer tes dijelaskan di bawah, bersama dengan kemungkinan penyebab utama dalam setiap kasus. Rab akan ditambahkan ke daftar ini saat mode kegagalan lainnya ditemukan.

Stempel waktu presentasi buffering video yang tidak terduga

Logcat akan berisi error yang mirip dengan:

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

Kegagalan ini paling sering disebabkan oleh dekoder video yang sedang diuji dengan cara yang salah membuang, memasukkan, atau mengatur ulang {i>buffer<i}. Pada contoh di atas, pengujian diperkirakan akan menghapus antrean buffer dengan stempel waktu presentasi 134766000 dari MediaCodec.dequeueOutputBuffer, tetapi ditemukan bahwa metode tersebut menghapus buffer dengan stempel waktu presentasi 134733000. Sebaiknya Anda memeriksa implementasi decoder saat menemui kegagalan ini, khususnya yang menangani tombol resolusi adaptif dengan benar tanpa menghapus buffer apa pun.

Terlalu banyak buffer yang diturunkan

Logcat akan berisi error yang mirip dengan:

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

Kegagalan ini adalah masalah performa, tempat dekoder video yang diuji terlambat men-dekode banyak buffer. Dalam contoh di atas, ExoPlayer dihapus 200 buffer karena terlambat pada saat dikeluarkan, untuk pengujian yang menerapkan batas 25 karakter. Penyebab paling jelas adalah decoder video adalah buffer dekode yang terlalu lambat. Jika kegagalan hanya terjadi untuk sebagian pengujian yang memutar konten yang dilindungi Widevine, kemungkinan bahwa operasi platform untuk dekripsi buffer terlalu lambat. Sebaiknya periksa performa komponen ini, dan melihat apakah ada pengoptimalan yang dapat dilakukan untuk mempercepat mereka.

Jendela native tidak dapat diautentikasi

Logcat akan berisi error yang mirip dengan:

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

Kegagalan ini merupakan indikasi bahwa platform gagal menyetel keamanan penanda bit.

Waktu pengujian habis

Logcat akan berisi error yang mirip dengan:

AssertionFailedError: Test timed out after 300000 ms.

Kegagalan ini sering kali disebabkan oleh konektivitas jaringan yang buruk selama pengujian akan dijalankan. Jika perangkat tampaknya memiliki konektivitas jaringan yang baik maka mungkin bahwa pengujian terhenti saat memanggil komponen platform (seperti MediaCodec, MediaDrm, atau AudioTrack). Periksa stack panggilan di dalam proses pengujian untuk menetapkan apakah hal ini terjadi.