|
一个服务端和一个客户端,服务端将音频音频数据发送到客户端,客户端收到音频数据后实时播放,现在存在以下问题(在不同的机器上测试过):
服务端的采样频率是8000,客户以8000的采样频率播放,但是客户端播放不是快了就是慢了,所以要么就出现停顿,要么时间一长客户端的音频缓冲区就会溢出。
问题分析结果:
1.经过测试,服务端发送过来确实是精确的以8000为采样频率,每秒收到16000个字节(每个采样点两个字节)。
2.通过客户端动态调整采样频率可以实现同步,整体思想是当客户端播放速度慢了,就调高采样频率;当客户端速度慢了,就调低采样频率,频率变化范围是(7900~8100)。但是当声音比较丰富的时候,会出现变调。
3.通过动态加减帧来实现同步,整体思想是当客户端播放速度慢了,就往音频缓冲中插入人为构造的音频数据;当客户端速度慢了,就删掉音频缓冲区一些数据。此方法因为难度较大,同时需要在缓冲区中积累一定量的数据才能进行调整,影响实时性,所以目前未具体实现。
本人在网上搜索的很长时间也没有什么收获,以至于百思不得其解,在此请教一下大家,希望各位不腻赐教,先谢谢了:
1. 声卡的频率在不同的机器上会不会有误差,为什么同样的采样频率一段声音,在不同的机器上播放时间会有偏差呢。
2. 如果声卡确实会有误差,那有没有其他的更好的行之有效的解决办法的。 |
|