(Android 5.x 비동기 API를 사용하는 예는 mstorsjo의 android-디코데인테스트 프로젝트를 참조하십시오.) 안드로이드 미디어코덱을 사용하여 샘플을 만듭니다. MediaCodec를 사용하여 디코더/인코더 예제를 구성합니다. 예를 들어 MediaCodec의 사례 사용 사례를 보여 준다. H.264(예: 네트워크 등을 통해)에서 샘플을 인코딩, 디코딩 및 전송하는 응용 프로그램에 유용할 수 있습니다. 소스 코드의 두 버전은 동일하게 작동합니다. 하나는 EGL 1.0, 다른 EGL 1.4에 대해 작성되었습니다. EGL 1.4는 작업하기가 좀 더 쉬울 수 있으며 다른 예제에서 사용하는 몇 가지 기능이 있지만 앱이 Android 4.1에서 작동하도록 하려면 사용할 수 없습니다. MediaCodec 디코더는 위의 형식 중 하나 또는 독점 형식을 사용하여 ByteBuffers에서 데이터를 생성할 수 있습니다. 예를 들어, 퀄컴 SoC를 기반으로 하는 장치는 일반적으로 OMX_QCOM_COLOR_FormatYUV420PackedSemiPlanar32m(#2141391876/0x7FA30C04)를 사용합니다. A4. 그렇기도 하고 그렇지 않기도 하고. 디코더는 바이트 스트림이 아닐 수 있는 “액세스 단위”의 스트림을 취합니다.
비디오 디코더의 경우 인코더에 의해 설정된 “패킷 경계”(예: H.264 비디오의 NAL 단위)를 유지해야 합니다. 예를 들어 디코딩EditEncodeTest 샘플의 VideoChunks 클래스가 어떻게 작동하는지 확인하십시오. 파일의 임의의 청크를 읽고 전달할 수는 없습니다. 디코더가 대역 외 메타데이터를 사용하는 HDR10+ 프로필에 대해 구성되지 않은 경우 이 매개 변수를 설정해서는 안 됩니다. 특히, 메타데이터가 입력 버퍼에 포함되는 대역 내 메타데이터를 사용하는 HDR10+ 프로필(예: MediaCodecInfo.CodecProfileLevel#HEVCProfileMain10HDR10Plus)에 대해 설정해서는 안 됩니다. A2. 이는 일반적으로 인코더에 필요한 필수 키를 모두 지정하지 않았기 때문입니다. 이 스택오버플로우 항목은 예를 들어 볼 수 있습니다. 인코더의 출력을 디코더에 공급하는 경우 인코더에서 얻는 첫 번째 패킷에는 BUFFER_FLAG_CODEC_CONFIG 플래그가 설정되어 있습니다. 디코더가 받는 첫 번째 버퍼가 설정을 수행하도록 이 플래그를 디코더에 전파해야 합니다. 또는 MediaFormat에서 CSD 데이터를 설정하고 configure()를 통해 디코더에 전달할 수 있습니다.
EncodeDecodeTest 샘플에서 두 가지 접근 방식의 예제를 볼 수 있습니다. finalize의 일반적인 계약은 Java™ 가상 머신이 종료 o에서 수행 한 작업의 결과를 제외하고 아직 죽지 않은 스레드에서이 개체에 액세스 할 수있는 수단이 더 이상 없다고 결정한 경우 호출된다는 것입니다. f 종료할 준비가 된 다른 개체 또는 클래스입니다. FINALize 메서드는 이 개체를 다른 스레드에서 다시 사용할 수 있도록 하는 등 모든 작업을 수행할 수 있습니다. 그러나 종료의 일반적인 목적은 개체가 취소할 수 없이 삭제되기 전에 정리 작업을 수행하는 것입니다. 예를 들어 입력/출력 연결을 나타내는 개체에 대한 종료 메서드는 개체가 영구적으로 삭제되기 전에 연결을 끊기 위해 명시적 I/O 트랜잭션을 수행할 수 있습니다. 참고: 이 테스트 및 기타 CTS 테스트의 경우 클래스 URL을 편집하여 관련 클래스를 볼 수 있습니다. 예를 들어 입력 표면 및 OutputSurface를 보려면 URL에서 “디코딩EditEncodeTest.java”를 제거하여 이 디렉터리 링크를 생성합니다. 구성 요소 인스턴스에 추가 매개 변수 변경 내용을 전달합니다.
참고: 빌드.버전_코드에서. 롤리팝, 미디어CodecList.findDecoder/인코더포맷의 형식은 미디어 포맷#KEY_FRAME_RATE를 포함해서는 안됩니다.