我正在为所有音频文件使用SLDataLocator_AndroidSimpleBufferQueue。 它运作良好,但...... 它不支持搜索和循环。
OpenSL不能要求SL_IID_SEEK使用缓冲区队列数据源
如何使用循环文件?不能使用流媒体 - 低延迟。
答案 0 :(得分:2)
我用播放器回调函数上的缓冲区队列Enqueue函数解决了这个问题。
像这样的示例代码......
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);
}
答案 1 :(得分:1)
事实证明,SLDataLocator_AndroidSimpleBufferQueue
无法做到这一点。
不得不使用SLDataLocator_AndroidFD
...