在Android

时间:2017-06-09 10:02:45

标签: android opensl

我正在开发一个使用OpenSL for 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 And​​roid 6.0
  Xperia X Performance Android 7.0
  Xperia Z4 Android 5.0

可能有更多设备遇到同样的问题,但我不知道 这是一个错误,还是我必须在设置播放状态之前将数据排入队列? 有没有人和我面临同样的问题?

0 个答案:

没有答案