【发布时间】:2013-10-23 07:16:33
【问题描述】:
是否可以解码存储在缓冲区中的 mp3 数据?
我知道我可以decode to a buffer after API version 14。但是我无法创建一个 SimpleBufferQueue 来用作解码器的输入。
这是当前的代码。我已经能够在其他地方获得一个简单的缓冲区队列来提供最终的音频输出,并且可以愉快地播放字节数组的 Wav,所以我知道 opensl/es、文件、平板电脑等没有任何问题。
// THIS CODE CRAHES THE PROGRAM WHEN YOU REALIZE THE PLAYER
//inbound
SLDataLocator_AndroidSimpleBufferQueue locIBQ = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
SLDataFormat_MIME format = {SL_DATAFORMAT_MIME, NULL, SL_CONTAINERTYPE_UNSPECIFIED};
SLDataSource audioSource = {&locIBQ, &format};
//outbound
SLDataLocator_AndroidSimpleBufferQueue locatorOutBufferQueue = {SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, 2};
SLDataSink audioSink = { &locatorOutBufferQueue, NULL };
//player
const SLInterfaceID playIds[2] = {SL_IID_PLAY, SL_IID_ANDROIDSIMPLEBUFFERQUEUE};
const SLboolean playReq[2] = {SL_BOOLEAN_TRUE, SL_BOOLEAN_TRUE};
SLresult result = (*engineEngine)->CreateAudioPlayer(engineEngine, &(bqPlayerObject), &audioSource, &audioSink, 2, playIds, playReq);
谢谢大家
【问题讨论】:
-
你有没有想过这是否可能?我目前正在寻找这样做...看起来几乎可以。
-
不,我没有找到方法,太糟糕了,因为我真的需要它。不幸的是,一些主要的应用程序(xbmc、firefox 等)似乎使用 libstagefright 进行媒体解码而不是 opensl/es。 stagefright 在 ndk 之外,因此是一个真正的 PITA 开始工作。我还没有尝试过这样做,也没有找到任何好的指南。对不起