OEM のテスト

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).

この障害は、テスト対象の動画デコーダがバッファを誤って破棄、挿入、並べ替えることが原因で発生することがほとんどです。上記の例では、テストでは MediaCodec.dequeueOutputBuffer からプレゼンテーション タイムスタンプ 134766000 のバッファをキューから削除することが期待されていましたが、代わりにプレゼンテーション タイムスタンプ 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.

この失敗はほとんどの場合、テスト中のネットワーク接続不良が原因です。 表示されます。デバイスのネットワーク接続が良好であれば、 プラットフォーム コンポーネント( MediaCodecMediaDrmAudioTrack など)。アプリケーションのコールスタックを検査し、 テストプロセス内のスレッドを使用して、これに該当するかどうかを確認します。