OPENAL的播放速度
我的流式播放器程序中, 收到服务端送来的数据流:
如果是视频帧, 就解码显示视频;
如果是音频帧, 就解码播放声音;
结果最后停止流数据后, 总会发现声音还能播放一段时间, 我每次播放声音的时候, 调用的是下面这个函数, 播放与解码是在一个线程中进行.
long openal_fill(uint8_t* data, int size, int format, int freq)
{
if (data == 0 || size <= 0)
return -1;
// 填充缓冲器
@autoreleasepool {
NSCondition* condition = [[NSCondition alloc] init];
[condition lock];
ALuint bufferId;
// 创建缓冲器
alGenBuffers(1, &bufferId);
// 将PCM数据填充到缓冲器
alBufferData(bufferId, format, data, size, freq);
// 把一个缓冲器或多个缓冲器附加在一个声源上
alSourceQueueBuffers(mOA->mSourceID, 1, &bufferId);
[condition unlock];
}
// 播放声音
ALint stateVaue;
alGetSourcei(mOA->mSourceID, AL_SOURCE_STATE, &stateVaue);
if (stateVaue != AL_PLAYING)
{
alSourcePlay(mOA->mSourceID);
return -2;
}
// 清理缓冲器
ALint processed;
alGetSourcei(mOA->mSourceID, AL_BUFFERS_PROCESSED, &processed);
for (; processed > 0; processed--)
{
ALuint bufferId;
alSourceUnqueueBuffers(mOA->mSourceID, 1, &bufferId);
alDeleteBuffers(1, &bufferId);
}
return 0;
}
求教一下, 可能是什么问题? 能不能加快openal从缓冲区播放声音的速度?