蓝牙 | 软件:获取蓝牙codec支持列表

         在手机开发者选项中,有一个配置项可以选择蓝牙音频的编码格式,这是作为发射端的权利,而接收端只能被动接受。然而,在高通的source工程中,并没有提供这样的UI界面让用户自由选择编码格式。默认情况下,系统会按照SEP表中的排序优先级来选择编码格式。底层代码会根据这个SEP表逐一与远端的SEP进行比对,当双方都能兼容时,就会使用该编码格式进行传输。低优先级的编码格式甚至不会被读取,这就限制了用户的选择空间,尤其是对于带屏的source设备来说,更无法全面感知接收端的能力。

       要获取完整的编码格式支持列表,首先需要了解如何获取这些信息。通过抓包分析A2DP协议建立时的通信过程,发射端会询问接收端支持多少种编码格式,接收端会回复其支持的所有编码格式对应的SEID。

蓝牙 | 软件:获取蓝牙codec支持列表

        这个SEID并不是具体的编码格式,而是接收端SEP表中的索引。因此,需要再发送一个指令,询问该SEID具体的编码能力。接收端会返回该SEID索引对应的编码格式类型,以及其支持的采样率、采样位数、模式等参数,这些参数就是我们需要的信息。

蓝牙 | 软件:获取蓝牙codec支持列表

因此,我们需要重复发送这个指令,遍历整个SEID列表,提取接收端的编码格式支持参数。在代码中(这里以3056代码为例,3086等新版本ADK的代码结构可能不同,但逻辑相同),当找到合适的编码格式时,系统会直接进行下一步配置,而不是继续获取参数。因此,我们需要在获取参数后中断这个过程,保存所需的参数,然后发起下一个获取动作。

蓝牙 | 软件:获取蓝牙codec支持列表

蓝牙 | 软件:获取蓝牙codec支持列表

       在这段代码中,我们最重要的是知道前面获取的SEID列表存放在哪里。ADK会通过block存储管理机制,将接收端的SEID列表保存在`data_block_list_discovered_remote_seids`的block中。我们需要将这些SEID一个个提取出来,放在全局变量中,通过其自身的机制自动完成获取编码格式内容的动作。这个机制比较复杂,大家可以通过`continueStreamConnect`这个函数来跟踪整体流程进行学习。

       以上是本期博文的全部内容,如有疑问就在博文下方评论留言,或者联系我们,我们会尽量安排上(o´ω`o)و。谢谢大家浏览,我们下期再见。

Q&A:

FAQ 1:有现成代码码?

A1:请联系我们支持团队获取。

FAQ 2:什么是SEP表?

A2:SEP表是蓝牙A2DP协议中的一个表格,用于记录设备支持的编码格式及其优先级。

FAQ 3:什么是SEID?

A3:SEID是Service Endpoint Identifier的缩写,是蓝牙A2DP协议中用于标识服务端点的唯一标识符。

FAQ 4: 如何抓包分析A2DP协议?

A4: 可以使用Wireshark等网络分析工具,通过蓝牙适配器捕获A2DP协议的通信数据进行分析。我这是安装ellisys软件里面默认的参考数据

FAQ 5:aptx的codec怎么看?

A5: 可以学习一下areVendorCodecsCompatible函数相关的代码

浏览更多精彩技术内容,可登录大大通!700+FAE为你在线解答!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值