OEM 테스트

ExoPlayer는 많은 수의 Android 앱에서 사용됩니다. OEM은 새 기기와 기존 기기의 새 플랫폼 빌드에서 ExoPlayer가 올바르게 작동하는지 확인해야 합니다. 이 페이지에서는 기기나 플랫폼 OTA를 배송하기 전에 실행하는 것이 권장되는 호환성 테스트와 이러한 테스트를 실행할 때 발생하는 일반적인 실패 모드를 설명합니다.

테스트 실행

ExoPlayer의 재생 테스트를 실행하려면 먼저 GitHub에서 ExoPlayer의 최신 버전을 체크아웃하세요. 그런 다음 명령줄 또는 Android 스튜디오에서 테스트를 실행할 수 있습니다.

명령줄

루트 디렉터리에서 재생 테스트를 빌드하고 설치합니다.

./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 스튜디오

ExoPlayer 프로젝트를 열고 playbacktests 모듈로 이동한 후 gts 폴더를 마우스 오른쪽 버튼으로 클릭하고 테스트를 실행합니다. 테스트 결과는 Android 스튜디오의 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는 25개로 제한된 테스트에서 대기열에서 삭제될 때까지 늦었기 때문에 200개의 버퍼를 삭제했습니다. 가장 명백한 원인은 동영상 디코더가 버퍼를 디코딩하는 속도가 너무 느린 것입니다. Widevine 보호 콘텐츠를 재생하는 테스트 하위 집합에서만 실패가 발생하는 경우 버퍼 복호화를 위한 플랫폼 작업이 너무 느린 것일 수 있습니다. 이러한 구성요소의 성능을 확인하고 속도를 높이기 위해 최적화할 수 있는지 살펴보는 것이 좋습니다.

네이티브 창을 인증할 수 없음

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)를 호출하는 데 멈춘 것일 수 있습니다. 테스트 프로세스의 스레드 호출 스택을 검사하여 이 경우인지 확인하세요.