ExoPlayer digunakan oleh banyak aplikasi Android. Sebagai OEM, Anda harus memastikan ExoPlayer berfungsi dengan benar di perangkat baru dan di build platform baru untuk perangkat yang ada. Halaman ini menjelaskan pengujian kompatibilitas yang sebaiknya dijalankan sebelum mengirimkan perangkat atau platform OTA, dan beberapa mode kegagalan umum yang ditemui saat menjalankannya.
Menjalankan pengujian
Untuk menjalankan tes pemutaran ExoPlayer, pertama-tama periksa rilis terbaru ExoPlayer dari GitHub. Kemudian, Anda dapat menjalankan pengujian dari command line atau Android Studio.
Command line
Dari direktori root, bangun dan instal pengujian pemutaran:
./gradlew :test-exoplayer-playback:installDebug
Selanjutnya, jalankan pengujian pemutaran di 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
folder gts, lalu jalankan pengujian. Hasil pengujian ditampilkan di jendela Run
Android Studio.
Mode kegagalan umum
Beberapa mode kegagalan umum yang ditemui saat menjalankan pengujian pemutaran ExoPlayer dijelaskan di bawah, beserta kemungkinan penyebab utamanya dalam setiap kasus. Kami akan menambahkan ke daftar ini saat mode kegagalan lainnya ditemukan.
Stempel waktu presentasi buffer 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 decoder video yang sedang diuji salah
menghapus, menyisipkan, atau menyusun ulang buffer. Pada contoh di atas, pengujian
diharapkan untuk mengeluarkan buffer dengan stempel waktu presentasi 134766000 dari
MediaCodec.dequeueOutputBuffer, tetapi menemukan bahwa pengujian mengeluarkan buffer dengan
stempel waktu presentasi 134733000. Sebaiknya periksa penerapan decoder saat mengalami kegagalan ini, khususnya pastikan decoder menangani peralihan resolusi adaptif dengan benar tanpa menghapus buffer apa pun.
Terlalu banyak buffer yang dilepas
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, di mana dekoder video yang sedang diuji terlambat mendekode sejumlah besar buffer. Dalam contoh di atas, ExoPlayer menghilangkan 200 buffer karena terlambat saat dikeluarkan dari antrean, untuk pengujian yang membatasi 25 buffer. Penyebab yang paling jelas adalah dekoder video terlalu lambat dalam mendekode buffer. Jika kegagalan hanya terjadi pada subset pengujian yang memutar konten yang dilindungi Widevine, kemungkinan operasi platform untuk dekripsi buffer terlalu lambat. Sebaiknya periksa performa komponen ini dan lihat apakah ada pengoptimalan yang dapat dilakukan untuk mempercepatnya.
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 menunjukkan bahwa platform gagal menyetel tanda bit aman dengan benar.
Waktu tunggu pengujian habis
Logcat akan berisi error yang mirip dengan:
AssertionFailedError: Test timed out after 300000 ms.
Kegagalan ini paling sering disebabkan oleh konektivitas jaringan yang buruk selama menjalankan
pengujian. Jika perangkat tampaknya memiliki konektivitas jaringan yang baik, kemungkinan
pengujian macet saat memanggil komponen platform (seperti
MediaCodec, MediaDrm, atau AudioTrack). Periksa stack panggilan
thread dalam proses pengujian untuk memastikan apakah ini penyebabnya.