ExoPlayer digunakan oleh sejumlah besar aplikasi Android. Sebagai OEM, penting untuk memastikan bahwa 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 dialami saat menjalankannya.
Menjalankan pengujian
Untuk menjalankan pengujian pemutaran ExoPlayer, periksa rilis terbaru dari ExoPlayer dari GitHub. Kemudian, Anda dapat menjalankan pengujian dari command line 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
folder gts
, lalu 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
diharapkan menghapus buffer dari antrean dengan stempel waktu presentasi 134766000
dari
MediaCodec.dequeueOutputBuffer
, tetapi ternyata menghapus buffer dari antrean 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, saat decoder video yang sedang diuji terlambat mendekode buffer dalam jumlah besar. Dalam contoh di atas, ExoPlayer dihapus 200 buffer karena terlambat pada saat dikeluarkan, untuk pengujian yang menerapkan batas 25 karakter. Penyebab yang paling jelas adalah dekoder video terlalu lambat mendekode buffering. Jika kegagalan hanya terjadi untuk sebagian pengujian yang memutar konten yang dilindungi Widevine, kemungkinan operasi platform untuk dekripsi buffering 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 tunggu 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, mungkin
pengujian macet saat memanggil komponen platform (seperti
MediaCodec
, MediaDrm
, atau AudioTrack
). Periksa stack panggilan
thread dalam proses pengujian untuk mengetahui apakah hal ini benar.