
a2dp蓝牙协议
-
2023年3月2日发(作者:软件设计方法)HFP和A2DP
引⾔
最近在车上实际测试了下御驾助⼿,当御驾助⼿通过车载蓝⽛播放⾳频时,发现⾳频质量⾮常差,实际在公司也测试到了这种情况,但是在车内的
封闭环境中尤为明显。
原因
在⽹上查阅相关⽂档,发现这个问题是由蓝⽛传输协议造成的。
蓝⽛⽿机主要有三⼤规格:HSP、HFP和A2DP。
HeadsetPro-file(HSP)代表⽿机功能,提供⼿机与⽿机之间通信所需的基本功能。
HandProfile(HFP)则代表免提功能,HFP在HSP的基础上增加了某些扩展功能。
AdvancedAudioDistributionProfile(A2DP),指的是蓝⽛⾳频传输模型协定。
HFP格式的蓝⽛⽿机⽀持⼿机功能⽐较完整,消费者可在⽿机上操作⼿机设定好的重拨、来电保留、来电拒听等免提选项
功能。
A2DP是⾼级⾳频传送规格,允许传输⽴体声⾳频信号,相⽐⽤于HSP和HFP的单声道加密,质量要好得多。
问题出现的原因就是我们的App和⽀架连接采⽤了HFP协议来进⾏⾳频传输,使⽤过⼿机免提功能的⼈应该知道就是那种⾳质。
尝试
我修改了APP和⽀架之间的传输协议为A2DP(iOS10之后的版本才⽀持蓝⽛连接采⽤A2DP),发现这次的⾳频质量就⾮常⾼,和原⾳质⼏⽆
差别。
但是,A2DP只是⼀个⾳频传输协议,它只能保证将⾳频输出切换到⽀架,⽽⾳频输⼊就⽆法采⽤⽀架的麦克风。
理想的情况应该是这样:⾳频输出采⽤A2DP来进⾏⾼质量的⾳频传输,⾳频输⼊采⽤HFP并使⽤⽀架的麦克风来进⾏采集。
我尝试上述情况的测试,发现⼆者是互相冲突的,采⽤了HFP来进⾏⾳频输⼊,那么输出就只能使⽤HFP。在苹果的官⽅⽂档有这么⼀段描述:
"IfanapplicationusesthesetPreferredInput:error:methodtoselectaBluetoothHFPinput,theoutputwill
er,selectingaBluetoothHFPoutputusing
theMPVolumeView'srore
boththeinputandoutputwillalwaysendupontheBluetoothHFPdeviceeventhoughonlytheinputor
outputwassetindividually."
核⼼的意思就是说我们如果的应⽤选择蓝⽛HFP输⼊,那么输出将⾃动更改为蓝⽛HFP输出。
我没有深⼊的研究过具体的蓝⽛通信协议,但是可以理解成HFP的输⼊和输出是成对出现的。这样,我们的理想情况就⽆法实现了。
解决办法
在⼀番尝试之后,我觉得⽬前有2种⽅案可供实⾏。
1.维持原状的⽅案,就是继续采⽤HFP来进⾏⾳频的输⼊和输出,这种⽅案可以保证输⼊⾳频由⽀架的麦克风来提供,输出继续由⽀架来进⾏转
发。但是,问题就是⼀开始测试的那样,会导致⾳乐播放的⾳质差,⽽且需要⽀架的麦克风提供降噪,提⾼语⾳识别准确率的问题。
2.采⽤A2DP来进⾏⾼质量的蓝⽛⾳频输出,保证歌曲、声⾳的播放质量,采⽤⼿机麦克风来进⾏⾳频输⼊⽽不通过蓝⽛来采集⾳频。⽬前,苹
果⼿机在这⽅⾯有⼀些优化或者优势,以苹果6为例,这款⼿机⾃带3个麦克风,正⾯顶部有⼀个麦克风专门是⽤来处理声⾳输⼊并且⾃带语⾳
降噪,我们可以在应⽤中主动切换到这个麦克风来进⾏⾳频采集。⽽且所有麦克风都⽀持设置PolarPattern(麦克风单⼀指向性),我们的这
款应⽤完全可以设置成Cardioid(⼼型)实现进⼀步的语⾳采集灵敏度和降噪优化。
总结
我更倾向采⽤第⼆种⽅案,⾳频采集的问题解决了,也不需要⽀架的麦克风去单独做降噪,⽽且输出的⾳频质量也有保证。看了其他⼚家的应⽤,
例如:咚咚这款应⽤也是这么做的。这样的话,⽀架就不需要再安装麦克风,还能节约硬件成本。