最后一直在搞一个项目需求,搞的人挺郁闷的~~
需求很简单,就是将系统中各软件播放的声音通过软件抓取,然后再二次写到另外2个音频外设中,这样就可以实现同一系统中多个音频设备同时播放声音的功能。
功能是很牛逼,但在做的过程中出现了一系列的问题,今天本人统计总结一下:
由于外扩展的音频播放设备是通过蓝牙来实现的,且由于主机使用的是蓝牙4.2版本,导致同时带2个设备时出现一系列的问题”
1。第一个问题就是蓝牙的带宽问题。同时使用44100的采样率2通道每通道2字节的PCM数据格式,这个带宽基本上已经将蓝牙的带宽占满。所以在环境理想的情况下,大概20分钟左右出现数据堆积严重的问题,甚至有时将主机端的蓝牙设备拖死的现象。
2。在上面有说的是理想的环境下。由于蓝牙采用的是2.4G传输频率,导致在周围2.4G比较多的情况下会出现跳数播放卡的情况。想象我们周围的2.4G wifi是如此的多,还有大家现在都喜欢蓝牙耳机,相互之间的干扰,你可以想象。
3 。在个人电脑上蓝牙版本是5.0,发现比4。2要太多,不过偶尔的破音的情况。不过我外扩的一个USB-typec耳机没有问题,所以排除数据的问题,估计还是与蓝牙与蓝牙音箱有关。
4。在3的情况下,将2个蓝牙设备弄成只放一个,效果基本上直接使用系统选中蓝牙音箱播放效果一致。很偶尔出现卡一下的情况。
5。最近也看了一下USB的Feedback,严重怀疑蓝牙音箱的传输与有类似的东西。不过偶尔的破音是否与此支持有关,我还是真的不清楚。
6。系统的问题。使用主板自速的声卡,有时出现IAudioClient::GetCurrentPadding有时增大,但过阵子又会自动变少的情况。长时间应是一个动态的平衡。所以可以怀疑设备与主机的同步有关。
7。对于3的情况,基本上可以是干扰导致宽宽不足引起的问题,不过手中的蓝牙音箱不支持别的采样率。所以也没有办法测试了。

关于音频UAC的一些知识:http://usb.bytekits.com/uac/uac-uac.html

Android蓝牙高带宽 蓝牙音频带宽_采样率

Android蓝牙高带宽 蓝牙音频带宽_采样率_02

附件蓝牙版本对比:

LMP 9.x – Bluetooth 5.0
LMP 8.x – Bluetooth 4.2
LMP 7.x – Bluetooth 4.1
LMP 6.x – Bluetooth 4.0
LMP 5.x – Bluetooth 3.0 + HS
LMP 4.x – Bluetooth 2.1 + EDR