同学,别退出呀,我可是全网最牛逼的 Android 蓝牙分析博主,我写了上百篇蓝牙文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。
一、概述
我们来看下a2dp下面的播放场景吧。a2dp是蓝牙用来播放音乐的协议,正常情况下,播放音乐只从蓝牙耳机端输出,但是如果是来个通知类的声音,那策略的选择会同时从蓝牙耳机和speaker同时输出,由于speaker和蓝牙是采用的不同硬件设备输出,所以它在hal层应该是对应两个so的。所以,谷歌针对这种场景,继承PlaybackThread,实现了DuplicatingThread,这样就需要在audioflinger这边实现将数据拷贝到两个缓冲区的操作了。
在android下,对于链接蓝牙的音乐播放的话,按照我们的认知,肯定得从蓝牙出来,这是毋庸置疑的,也合乎常理,这个和一般的音乐播放一样,只是需要单纯的选择到对应的设备通过一个output即可完成播放。但是有一些特殊的场景,需要声音即从蓝牙耳机输出,又从设备的speaker输出,这个时候对于单个output的播放方式就无法满足这种场景了,于是谷歌引入duplicate播放该种类型声音的方案,接下来我们将一起来分析这部分的代码。
二、源码分析
接上文:
对于我们的场景,从上面我们已经知道打开了两个output。一个是mixer output,一个是duplicat