문제 해결


데모 앱에서 로컬 파일에 액세스할 수 없는 이유는 무엇인가요?

Android 11(API 수준 30)의 범위 지정 저장소 적용으로 인해 직접 파일 시스템 액세스가 방지됩니다. 개발 중 수동 테스트의 경우 데모 앱 매니페스트에 외부 저장소 관리 권한을 추가하여 로컬 파일에 액세스할 수 있습니다.

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

그런 다음 adb를 통해 권한을 부여합니다.

adb shell appops set --uid androidx.media3.demo.transformer \
    MANAGE_EXTERNAL_STORAGE allow

특정 기기에서 내보내기가 실패하는 이유는 무엇인가요?

문제를 재현할 수 있는 충분한 정보를 포함하여 Media3 문제 추적기에 문제를 신고하세요. 시간이 지남에 따라 호환성을 개선하기 위해 기기별 문제의 해결 방법을 라이브러리에 추가할 수 있습니다.

Transformer는 원격 미디어 변환 (또는 녹화)을 지원하나요?

트랜스포머는 MP4와 같은 미디어 파일 컨테이너를 비롯한 원격 프로그레시브 스트림을 지원합니다.

네트워크 상태가 매우 좋지 않으면 원격 미디어를 너무 오랫동안 버퍼링하여 파이프라인이 멈췄음을 식별하기 위한 믹서의 검사가 트리거되므로 내보내기가 실패할 수 있습니다. Transformer.Builder에서 maxDelayBetweenMuxerSamplesMs를 설정하여 기본 동작을 재정의할 수 있습니다.

Kotlin

Transformer.Builder(context).setMaxDelayBetweenMuxerSamplesMs(C.TIME_UNSET).build()

자바

new Transformer.Builder(context).setMaxDelayBetweenMuxerSamplesMs(C.TIME_UNSET).build();

C.TIME_UNSET를 전달하면 타임아웃이 완전히 삭제되지만 MediaCodec가 멈출 수 있는 칩셋에서 앱이 실행되는 경우 0이 아닌 더 큰 타임아웃을 설정하는 것이 좋습니다.

트랜스포머는 8k 입력을 지원하나요?

트랜스포머는 형식에 구애받지 않는 방식으로 구현되므로 8k 동영상 처리를 제한하지는 않지만 기기의 하드웨어 기능으로 인해 내보내기가 실패할 수 있습니다. 예를 들어 8k를 캡처할 수 있는 기기에서도 사용 가능한 하드웨어 코덱 또는 RAM 리소스를 초과하여 8k 동영상을 디코딩하고 다시 인코딩하지 못할 수 있습니다.

트랜스포머는 플랫폼 호환 미디어 트랜스코딩과 어떤 관련이 있나요?

호환 미디어 트랜스코딩은 Android 12 (API 수준 31)부터 제공되는 Android 플랫폼 기능으로, 최대 1분 길이의 미디어를 앱에서 지원하는 형식으로 변환합니다. 이 기능을 사용하도록 선택하면 호환되지 않는 형식의 미디어 파일을 읽을 때 주문형으로 트랜스코딩되며 결과는 나중에 읽기 작업을 위해 캐시됩니다.

트랜스포머는 형식 변환도 지원하지만 지원 라이브러리로 제공되며 앱이 트랜스코딩 작업을 완전히 제어할 수 있습니다.

내보내기 지연 시간을 줄이거나 처리량을 늘리려면 어떻게 해야 하나요?

트랜스포머는 하드웨어 가속 디코딩 및 인코딩에 MediaCodec를 사용하고 동영상 프레임 처리에는 OpenGL을 사용합니다. 일반적인 기기에서 측정한 결과에 따르면 Transformer의 처리량 제한 요소는 헤비급 효과 처리가 없는 사용 사례의 하드웨어 MediaCodec 인코더 처리량입니다. 이는 동일한 방식으로 다른 구현에 영향을 미칠 수 있습니다. 예를 들어 플랫폼 호환 트랜스코딩 기능은 트랜스포머와 비슷한 성능을 갖습니다.

데모 앱의 디버그 미리보기는 처리량을 크게 줄이므로 데모 앱의 출시 빌드로 테스트할 때는 미리보기 기능을 사용 중지하여 성능을 현실적으로 파악하세요.