최근에 안드로이드에 비디오 디코더를 포팅했습니다. 또한 출력물을 표면 뷰에 덤핑하고 원시 API를 사용하여 출력을 확인했습니다. 이제 다음 작업은 재생, 일시 중지, 스트리밍 등을 구현하는 것입니다. 즉 미디어 플레이어의 다른 기능을 구현하는 것입니다. 이렇게하면 이러한 모든 기능이 이미 Android 멀티미디어 프레임 워크에 정의되어 있으므로 재 작업이 될 것입니다. 디코더를 플러그인으로 만들어 Android의 멀티미디어 프레임 워크에 통합 할 수 있다고 들었습니다. 나는 같은 것에 관해서 googled했다. 그러나 나는 거의 같은 것에 관해 어떤 정보라도 발견 할 수 없었다. 그래서 나는 친절하게 위의 문제에 대한 몇 가지 링크 또는 해결책을 제안하는 독자들에게 요청합니다. 회신을 기다리며 미리 감사드립니다.안드로이드 : 멀티미디어 프레임 워크에 디코더를 통합하는 방법
답변
Android SF 프레임 워크에서 코덱은 media_codecs.xml
을 통해 등록됩니다. 표준 안드로이드 배포판에서 media_codecs.xml
의 예는 here입니다. 모든 시청각 구성 요소는 OMX
구성 요소로 등록됩니다.
1. 비디오 디코더를 등록하려면
코덱 등록, 당신은 <Decoders>
목록에 새 항목을 추가해야합니다. 코덱이 항상 선택되도록하려면 코덱이 특정 MIME
유형의 첫 번째 항목으로 나열되어 있는지 확인하십시오. H.264 디코더에 대한 예시적인 엔트리는 다음과 같을 수있다.
<Decoders>
<MediaCodec name="OMX.ABC.XYZ.H264.DECODER" type="video/avc" >
<Quirk name="requires-allocate-on-input-ports" />
<Quirk name="requires-allocate-on-output-ports" />
</MediaCodec>
<MediaCodec name="OMX.google.h264.decoder" type="video/avc" />
,
가. OMX.ABC.XYZ.H264.Decoder
은 구성 요소의 이름입니다.
b. video/avc
은 구성 요소의 유형이 MIME
입니다. 이 예에서, 이는 비디오 디코더 인 AVC/H.264을 나타낸다.
c. 다음 두 문장은 구성 요소의에 대한 quirks
또는 특수 요구 사항을 나타냅니다. 주어진 예에서 requires-allocate-on-input-ports
은 구성 요소가 모든 입력 포트에 버퍼를 할당하기를 원한다는 것을 프레임 워크 Stagefright
에 알립니다. 마찬가지로, 다른 quirk
도 구성 요소가 출력 포트에 할당하는 것을 선호한다는 것을 알려줍니다. 시스템에서 지원되는 quirks
의 목록은 파일의 OMXCodec::getComponentQuirks
함수를 참조 할 수 있습니다. 이러한 단점은 플래그로 변환되어 프레임 워크가 해당 구성 요소를 만들고 초기화합니다.
예제 그림에서는 OMX
구성 요소가 기본값 인 Google 구현 비디오 디코더보다 먼저 등록 된 것으로 나타났습니다.
참고 :이 장치를 최종 장치에서 사용하려는 경우이 항목을 최종 media_codecs.xml
파일에 반영해야합니다.
2
OMX 코어 등록은 Stagefright
프레임 워크와 OMX
코어를 등록이있을 수 있습니다, 구성 요소를 만들고 올바른 팩토리 메소드가 호출되어 있는지 확인합니다.
새 코어를 등록하려면 libstagefrighthw.so
이라는 새 라이브러리를 만들어야하며이 라이브러리는 최종 시스템에서 /system/lib
에 있습니다. 이 라이브러리는 dlsym
으로 표시 될 createOMXPlugin
심볼을 노출해야합니다.
OMX
코어의 등록은 OMXMaster
이며 addPlugin("libstagefrighthw.so")
을 내부적으로 호출하는 addVendorPlugin
을 호출합니다. addPlugin
에서 createOMXPlugin
은 makeComponentInstance
, destroyComponentInstance
등의 다른 함수 포인터가 초기화되어 사용됩니다.
OMX
코어가 초기화되면 Android 프레임 워크에서 구성 요소를 실행할 준비가 된 것입니다. OMXMaster
에 대한 참조는 here입니다.
이러한 변경 사항을 적용하면 비디오 디코더가 android stagefright 프레임 워크에 통합됩니다.
답장을 보내 주셔서 감사합니다. 그러나 나는 약간 혼란 스럽다. – Zax
디코딩 할 입력 파일을 선택하는 파일 탐색기와 입력 파일을 디코딩하는 디코드 단추가있는 프로젝트가 있다고 가정 해보십시오. 위 단계를 어떻게 진행합니까? 당신의 응답을 기다리는. 미리 감사드립니다. – Zax
@ Zax 여기 다른 스레드에서 대답했습니다. http://stackoverflow.com/questions/15356629/how-to-create-a-stagefright-plugin – Ganesh