蓝牙音乐AudioTrack Session ID的获取

当今这个音视频无处不在的时代,音频跟踪会话ID(AudioTrack Session ID)是个很重要的参数,可以用来实现音频相关的一些特效。接下来的内容我们就探究如何在安卓蓝牙系统中获取该id。

熟悉蓝牙音乐播放流程的同学都了解蓝牙音乐AVDTP的控制流与音频流以及AVRCP是如何作用的,以如下的交互图简单介绍下:
在这里插入图片描述

AVDTP连接阶段分为四步:

1、 发现对端支持的编码方式有哪几种

2、 获取每种编码方式的参数

3、 双方协商确定一个最优的编码方式

4、 建立该编码方式的AVDTP连接
在这里插入图片描述

音频播放过程中只要创建的audiotrack不变则对应的session id就会保持不变。播放蓝牙音乐也是这样。那蓝牙音乐对应的audiotrack
session id从哪儿获取呢?

创建audiotrack都会生成对应的session id,那问题就简单多了,蓝牙音乐播放过程中audiotrack在哪儿被创建的?

蓝牙音乐播放分为source、sink两端,source一般为音频流输出端,sink接收音频流方。这篇文章主要是已sink端来讲解蓝牙音频播放流程。Sink方(蓝牙耳机、音响、车载等)的蓝牙芯片接收到音频流后通过HCI送到蓝牙协议栈,在协议栈中直接通过audio track送入安卓音频系统播放音乐。

结合蓝牙协议栈的代码可以快速找到audio track的创建处为:BtifAvrcpAudioTrackCreate(),通过sp<android::AudioTrack>
track可以实现session id的获取。

那如何将该id送到application层呢?这块就需要我们了解安卓蓝牙系统中媒体音频的架构,从而添加接口来获取session id。

安卓系统中关于媒体音频的架构类似于整个蓝牙系统,见下图:
在这里插入图片描述

根据上面的系统架构图,则获取audiotrack session id的接口主要和framework、service、JNI以及Bluedroid中btif都有关系。大概的时序图如下:

在这里插入图片描述
至此audiotrack session id就通过新增接口被相关应用获取。

更多互联互通技术,欢迎关注微信公众号:Connectivity
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章