ExoPlayer digunakan oleh banyak aplikasi Android. Sebagai OEM, penting untuk memastikan bahwa ExoPlayer berfungsi dengan benar baik di perangkat baru maupun di build platform baru untuk perangkat yang sudah ada. Halaman ini menjelaskan pengujian kompatibilitas yang kami rekomendasikan untuk dijalankan sebelum mengirimkan OTA perangkat atau platform, dan beberapa mode kegagalan umum yang ditemui saat menjalankannya.
Menjalankan pengujian
Untuk menjalankan pengujian pemutaran ExoPlayer, pertama-tama lihat rilis terbaru ExoPlayer dari GitHub. Kemudian, Anda dapat menjalankan pengujian dari command line atau Android Studio.
Command line
Dari direktori root, build 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
pada folder gts
dan 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 ini, beserta kemungkinan penyebab utama dalam setiap kasus. Kami akan menambahkan ke daftar ini saat mode kegagalan lebih lanjut 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 sering kali disebabkan oleh dekoder video yang sedang diuji, salah menghapus, memasukkan, atau mengurutkan ulang buffer. Pada contoh di atas, pengujian
ingin mengurangi antrean buffer dengan stempel waktu presentasi 134766000
dari
MediaCodec.dequeueOutputBuffer
, tetapi mendapati bahwa buffer dengan
stempel waktu presentasi 134733000
dihapus. Sebaiknya periksa
implementasi decoder saat mengalami kegagalan ini, khususnya
bahwa implementasi tersebut
menangani tombol resolusi adaptif dengan benar tanpa menghapus buffer apa pun.
Terlalu banyak buffering
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, karena dekoder video yang sedang diuji terlambat mendekode sejumlah besar buffering. Dalam contoh di atas, ExoPlayer menjatuhkan 200 buffer karena terlambat pada saat di-dequeuer, untuk pengujian yang memberlakukan batas 25. Penyebab yang paling jelas adalah dekoder video memproses buffering dekode terlalu lambat. Jika kegagalan hanya terjadi untuk subset pengujian yang memutar konten yang dilindungi Widevine, kemungkinan operasi platform untuk dekripsi buffer terlalu lambat. Sebaiknya periksa performa komponen ini, dan periksa apakah pengoptimalan 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 menetapkan flag bit aman dengan benar.
Waktu 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 pengujian
berjalan. 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 memastikan apakah ini masalahnya.