6

최근에 안드로이드에 비디오 디코더를 포팅했습니다. 또한 출력물을 표면 뷰에 덤핑하고 원시 API를 사용하여 출력을 확인했습니다. 이제 다음 작업은 재생, 일시 중지, 스트리밍 등을 구현하는 것입니다. 즉 미디어 플레이어의 다른 기능을 구현하는 것입니다. 이렇게하면 이러한 모든 기능이 이미 Android 멀티미디어 프레임 워크에 정의되어 있으므로 재 작업이 될 것입니다. 디코더를 플러그인으로 만들어 Android의 멀티미디어 프레임 워크에 통합 할 수 있다고 들었습니다. 나는 같은 것에 관해서 googled했다. 그러나 나는 거의 같은 것에 관해 어떤 정보라도 발견 할 수 없었다. 그래서 나는 친절하게 위의 문제에 대한 몇 가지 링크 또는 해결책을 제안하는 독자들에게 요청합니다. 회신을 기다리며 미리 감사드립니다.안드로이드 : 멀티미디어 프레임 워크에 디코더를 통합하는 방법

답변

14

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에서 createOMXPluginmakeComponentInstance, destroyComponentInstance 등의 다른 함수 포인터가 초기화되어 사용됩니다.

OMX 코어가 초기화되면 Android 프레임 워크에서 구성 요소를 실행할 준비가 된 것입니다. OMXMaster에 대한 참조는 here입니다.

이러한 변경 사항을 적용하면 비디오 디코더가 android stagefright 프레임 워크에 통합됩니다.

+0

답장을 보내 주셔서 감사합니다. 그러나 나는 약간 혼란 스럽다. – Zax

+0

디코딩 할 입력 파일을 선택하는 파일 탐색기와 입력 파일을 디코딩하는 디코드 단추가있는 프로젝트가 있다고 가정 해보십시오. 위 단계를 어떻게 진행합니까? 당신의 응답을 기다리는. 미리 감사드립니다. – Zax

+0

@ Zax 여기 다른 스레드에서 대답했습니다. http://stackoverflow.com/questions/15356629/how-to-create-a-stagefright-plugin – Ganesh