Записанные звуковые данные не воспроизводятся с использованием OpenSL на Android

Я работаю над проектом, использующим OpenSL для Android, и у меня возникла проблема. В этом следующем случае волновые данные, помещенные в очередь, будут пропущены в редких случаях.

SLObjectItf mpSLPlayerObject;
SLPlayItf    mpPlayItf;
SLAndroidSimpleBufferQueueItf mpBufferQueueItf;

(*mpSLPlayerObject)->GetInterface(mpSLPlayerObject, SL_IID_PLAY, &mpPlayItf);
(*mpSLPlayerObject)->GetInterface(mpSLPlayerObject, SL_IID_BUFFERQUEUE, &mpBufferQueueItf);

(*mpPlayItf)->SetPlayState(mpPlayItf, SL_PLAYSTATE_PLAYING);
(*mpBufferQueueItf)->Enqueue(mpBufferQueueItf, pBuffer, bufferSize);

Статус mpPlayItf изменится на SL_PLAYSTATE_PLAYING, и данные будут успешно помещены в очередь.
Но данные в mpBufferQueueItf остаются постоянно, а статус mpPlayItf не меняется.

Но в следующем случае

SLObjectItf mpSLPlayerObject;
SLPlayItf    mpPlayItf;
SLAndroidSimpleBufferQueueItf mpBufferQueueItf;

(*mpSLPlayerObject)->GetInterface(mpSLPlayerObject, SL_IID_PLAY, &mpPlayItf);
(*mpSLPlayerObject)->GetInterface(mpSLPlayerObject, SL_IID_BUFFERQUEUE, &mpBufferQueueItf);

(*mpBufferQueueItf)->Enqueue(mpBufferQueueItf, pBuffer, bufferSize);
(*mpPlayItf)->SetPlayState(mpPlayItf, SL_PLAYSTATE_PLAYING);

Когда я поменял две строки для Enqueue и SetPlayState, все волновые данные будут воспроизводиться безупречно.

Я сталкиваюсь с этой проблемой на устройстве 3 ниже.

Nexus 5X Android 6.0
Xperia X Performance Android 7.0
Xperia Z4 Android 5.0

Может быть больше устройств с той же проблемой, но я понятия не имею.
Это ошибка или я должен поставить в очередь свои данные перед настройкой состояния воспроизведения? Кто-нибудь сталкивается с той же проблемой со мной?

0 ответов

Другие вопросы по тегам