2014-12-12 2 views
1

NDAC AMediaCodec API를 사용하여 AAC를 성공적으로 디코딩 할 수 있지만 오디오가 재생되지 않습니다.안드로이드에서 AAC 오디오를 디코딩 할 때 MediaCodec이 디코딩되지만 아무런 출력도들을 수 없습니다.

AMediaFormat_setString(format, AMEDIAFORMAT_KEY_MIME, "audio/mp4a-latm"); 
AMediaFormat_setInt32(format, AMEDIAFORMAT_KEY_CHANNEL_COUNT, 2); 
AMediaFormat_setInt32(format, AMEDIAFORMAT_KEY_SAMPLE_RATE, 44100); 
AMediaFormat_setInt32(format, AMEDIAFORMAT_KEY_IS_ADTS, 0); 

uint8_t es[2] = { 0x12, 0x12 }; 
AMediaFormat_setBuffer(format, "csd-0", es, 2); 

그리고 여기에 내가 디코딩 할 수있는 작업은 다음과 같습니다 : 여기

내 구성의 I 오류를받지 못했습니다

ssize_t inputIndex = AMediaCodec_dequeueInputBuffer(decoder, kInputTimeout); 
uint8_t* inputBuf = AMediaCodec_getInputBuffer(decoder, inputIndex, &inputSize); 

// Copy AAC data into inputBuf ... 

AMediaCodec_queueInputBuffer(decoder, inputIndex, 0, aacSize, pts, 0); 

ssize_t outputIndex = AMediaCodec_dequeueOutputBuffer(decoder, &outputBufferInfo, kOutputTimeout); 

if(outputIndex >= 0) 
{ 
    AMediaCodec_releaseOutputBuffer(decoder, outputIndex, true); 
} 

을, 그리고 그것을 것 같다, 그래서 outputBufferInfo.presentationTimeUs는 적절하게 업데이트되는 디코딩. 그러나 오디오가 출력되지 않습니다. 오디오의 경우 releaseOutputBuffer이 맞습니까? 나는 truefalse 모두에 대해 render 부울 매개 변수를 설정하려했지만 둘 다 침묵합니다.

MediaCodec은 비디오처럼 오디오를 출력합니까?

답변

1

아니요, MediaCodec은 자동으로 오디오를 렌더링하지 않습니다. releaseOutputBuffer의 render 매개 변수는 오디오 용으로 아무 것도하지 않습니다. 이러한 문제에 대한 자세한 설명은 MediaCodec 클래스의 NDK 문서에서 부족할 수 있습니다.

디코딩 된 출력 버퍼를 수동으로 가져 와서 AudioTrack 또는 OpenSL ES에 순서대로 공급해야합니다 그것을 다시 재생합니다.

관련 문제