1

我正在为所有音频文件使用 SLDataLocator_AndroidSimpleBufferQueue。它工作得很好,但是......它不支持搜索和循环。

OpenSL 不能要求带有缓冲区队列数据源的 SL_IID_SEEK

我如何使用循环文件?不能使用流媒体 - 低延迟。

4

2 回答 2

2

我用播放器回调函数上的缓冲区队列入队函数解决了这个问题。

像这样的示例代码...

struct PARAM { char* buffer;  long  size; };

void bqPlayerCallback(SLAndroidSimpleBufferQueueItf bqPlayerBufferQueue, void *context)
{
    ...
    PARAM* param = (PARAM*)context;
    result = (*bqPlayerBufferQueue)->Enqueue(bqPlayerBufferQueue, param->buffer, nparam->size);
}

void createAudioPlayer... {
    (*engineEngine)->CreateAudioPlayer(engineEngine, &bqPlayerObject, ...);
    ...
    PARAM* param = new PARAM{buffer, size};
    result = (*bqPlayerBufferQueue)->RegisterCallback(bqPlayerBufferQueue, bqPlayerCallback, param);
}
于 2016-11-18T07:30:10.617 回答
1

事实证明,这是不可能的SLDataLocator_AndroidSimpleBufferQueue。不得不用SLDataLocator_AndroidFD...

于 2013-11-24T09:57:57.543 回答