实时在线音频延时的处理(借用speex)

项目中遇到实时在线音频播放累加延时问题,原因是设备发送音频数据频率不稳定。分析表明网络延迟,尤其是3G网络环境下,可能导致该问题。解决方案是使用Speex库来检测并丢弃静音和噪音帧,以减少延时。适用采样率为8000Hz,并需注意释放Speex资源。

实际项目中出现实时在线音频播放会有累加延时的问题,越久延时越长。

经过各方面检查发现是设备发送音频数据频率不稳定产生的:

比如本来应该是每秒5包音频包的数据过来的,但是某一秒设备没把数据及时发过来,造成这一秒内没数据播放,但是下秒又多了数据,但是播放速度是固定的,所以相当于延时了一秒,这种情况出现多了延时就会变长。

后来分析了下网络出现这种情况比较常见,特别这个项目是用3G网络可能性还是蛮大的。

解决方法是利用speex判断静音及噪音帧,在延时的情况下丢弃静音及噪音帧,不播放赶上本来的进度

m_pSt = speex_preprocess_state_init(L_FRAME, 8000);

iParam = 1;
speex_preprocess_ctl(m_pSt, SPEEX_PREPROCESS_SET_VAD, &iParam); //静音检测

L_FRAME是帧的长度,单位为short,所以是L_FRAME*2字节

8000采样率

<span style="white-space:pre">				</span>vad = speex_preprocess_run(m_pSt, pcmFrame);

				if (0 == vad)
				{
					//静音或噪声
					dif = m_decodingBuf.endPos - startPos;
					if (480 < dif || (0 > dif && 480 < m_decodingBuf.maxLen + dif) )
					{
						continue;
					}
					else if (5 > m_block.freeblock)
					{
						continue;
					}
				}
碰到静音或噪声帧时判断下缓存数据长度是否比较长,及已经播放完
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值