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).
이 실패는 주로 테스트 중인 동영상 디코더의 잘못된 연결 때문에 발생합니다.
버퍼 삭제, 삽입, 재정렬하기가 포함됩니다. 위의 예에서 테스트는
다음에서 프레젠테이션 타임스탬프가 134766000
인 버퍼를 대기열에서 삭제할 것으로 예상됩니다.
MediaCodec.dequeueOutputBuffer
그러나
대신 프레젠테이션 타임스탬프 134733000
을(를) 사용하세요. 이 오류가 발생하면 디코더 구현을 확인하는 것이 좋습니다. 특히 버퍼를 삭제하지 않고 적응형 해상도 전환을 올바르게 처리하는지 확인합니다.
버퍼가 너무 많이 삭제됨
Logcat에 다음과 유사한 오류가 포함됩니다.
junit.framework.AssertionFailedError: Codec(DashTest:Video) was late decoding:
200 buffers. Limit: 25.
이 실패는 성능 문제로, 테스트 중인 동영상 디코더가 많은 수의 버퍼를 지연 디코딩합니다. 위의 예에서 ExoPlayer는 큐에서 제거될 때 지연되어 25개로 제한된 테스트에서 버퍼 200개를 삭제했습니다. 가장 명백한 원인은 동영상 디코더가 버퍼를 디코딩하는 속도가 너무 느리기 때문입니다. Widevine 보호 콘텐츠를 재생하는 테스트의 하위 집합에서만 실패가 발생하는 경우 버퍼 복호화를 위한 플랫폼 작업이 너무 느린 것일 수 있습니다. Ad Exchange의 최적화가 필요한 부분이 있는지 확인하여 합니다.
네이티브 창을 인증할 수 없음
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
) 애플리케이션의 호출 스택을
테스트 프로세스의 스레드를 사용하여 이 경우에 해당하는지 확인합니다.