OPENAL的播放速度

vision66 vision66 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我的流式播放器程序中, 收到服务端送来的数据流:
如果是视频帧, 就解码显示视频;
如果是音频帧, 就解码播放声音;
结果最后停止流数据后, 总会发现声音还能播放一段时间, 我每次播放声音的时候, 调用的是下面这个函数, 播放与解码是在一个线程中进行.
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从缓冲区播放声音的速度?
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
vision66
iOS 29,038 成员 12,459 内容