ExoPlayer は多くの Android アプリで使用されています。OEM として ExoPlayer が新しいデバイスでも、Android でも正常に動作するように 既存のデバイス向けに 新しいプラットフォームを構築しましたこのページでは互換性について説明します デバイスまたはプラットフォーム 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 個という上限があります最も明白な原因は、動画デコーダの デコーディングバッファが遅すぎますテストのサブセットでのみ失敗する場合 再生する場合、プラットフォーム オペレーションが 遅すぎる場合です。Cloud Monitoring で 最適化の余地がないか検討します 作成します。
ネイティブ ウィンドウを認証できませんでした
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
など)。アプリケーションのコールスタックを検査し、
テストプロセス内のスレッドを使用して、これに該当するかどうかを確認します。