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 스튜디오의
실행 창
일반적인 장애 모드
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개의 한도가 적용됩니다 가장 명백한 원인은 동영상 디코더가 디코딩 버퍼가 너무 느립니다. 테스트 하위 집합에서만 실패가 발생하는 경우 재생 중이었다면 플랫폼 운영은 너무 느립니다 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
) 애플리케이션의 호출 스택을
테스트 프로세스의 스레드를 사용하여 이 경우에 해당하는지 확인합니다.