大量 Android 應用程式都使用 ExoPlayer。對 OEM 而言 請務必確保 ExoPlayer 在新裝置及 打造適用於現有裝置的新版平台本頁說明相容性 測試裝置或平台 OTA 前建議執行。 執行這些模式時常見的故障模式,
執行測試
如要執行 ExoPlayer 的播放測試,請先查看最新版本的 GitHub 的 ExoPlayer。接著,您可以透過指令列或 Android Studio。
指令列
在根目錄中,建構並安裝播放測試:
./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 Studio
開啟 ExoPlayer 專案,前往 playbacktests
模組,並按一下滑鼠右鍵。
gts
資料夾,然後執行測試。測試結果會顯示在 Android Studio 的
「Run」(執行) 視窗。
常見的故障模式
執行 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 個最明顯的原因是 速度過慢的解碼緩衝區如果只有部分測試會失敗 很有可能是平台運作 緩衝區解密速度太慢建議您查看 並思考能否著手改善 所以
無法驗證原生視窗
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
)。檢查應用程式的呼叫堆疊
測試程序中的執行緒,以確定情況是否如此。