2012-09-18 9 views
1

에 새 MediaCodec API을 사용하여 h264 stream을 디코딩합니다. 현상 페이지의 코드 단편 사용 , (media_codec.xml 찍은) 이름 디코더를 인스턴스화 표면을 통과하고, 코덱을 구성.Android MediaCodec dequeOutputBuffer는 항상 -1을 반환합니다.

내가 직면 한 문제는 dequeOutputBuffer는 항상 -1을 반환합니다. 음의 시간 제한 시도
는 , indefenitely 그와 행운을 기다릴 수 있습니다. 나는 -1을받을 때마다
는 getOutputBuffers를 사용하여 버퍼를 갱신.

사용자 지정 응용 프로그램은 미디어 소스에서 데이터를 분석하고 디코더 제공하는 데 사용되는 경우 같은 문제가 볼 수 있습니다.

상의 모든 입력 이상 도움이 될 것입니다

+0

코드를 게시 할 수 있습니까? 추가로 디버그 해 드리겠습니다. – itsmeagain

+0

mediacodec 사용 예 : http://bigflake.com/mediacodec/ – fadden

답변

0

만약 당신이 완료 후 출력 코덱을 해제해야합니다 MediaCodec로 시작하는 동안 다른 사람이 문제 (오늘처럼)을 마주하는 사람 그것들 :

mediaCodec.releaseOutputBuffer(index, render); 

그렇지 않으면 코덱에서 곧 사용 가능한 버퍼가 부족합니다.

0

출력 버퍼에서 데이터를 얻기 전에 여러 입력 버퍼를 공급해야 할 수 있습니다.

0

-1은 INFO_TRY_AGAIN_LATER입니다. 출력 버퍼 대기열이 아직 준비 중이므로 다시 dequeueOutputBuffer을 호출하면됩니다. ExoPlayer 유사한 루프에서 dequeueOutputBuffer를 호출하는 작업 루프를 사용하여

시도 : drainOutputBuffer이 dequeueOutputBuffer를 호출하는 방법이다

while (drainOutputBuffer(positionUs, elapsedRealtimeUs)) {} 
    if (feedInputBuffer(true)) { 
     while (feedInputBuffer(false)) {} 
    } 

.