用openAL播放ffmpeg解码的buffer突然加速问题

问题重现

如果你已经研究了一段时间的openAL或者下载过大量openAL相关的代码,那么你应该知道,openAL的播放模式是将一个个unsigned char *格式的数据添加到一个队列中,然后逐步播放。
当用ffmpeg将音频文件解码成一帧帧的数据后,填充到openAL的队列当中。
因为是边解码边播放,而且解码速率远远大于播放速度,因此openAL的队列中会堆积大量的buffer。这也是音频播放到一定时间就突然莫名其妙加速的原因。

问题解决

openAL中有获取到当前队列中堆积buffer数量的方法:
alGetSourcei(outSourceID,AL_BUFFERS_QUEUED,&queued);
在解码病添加到queue中的过程中,获取一下当前队列中buffer数量,当大于200或其他一个不过于大的数时,等待1秒。

if([openALPlayer getQueued]>200){
    sleep(1);
}
[openALPlayer addToQueue:data size:size];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值