原标题:安卓蓝牙系统中如何获取蓝牙音乐的音频跟踪会话ID

蓝牙音乐AudioTrack Session ID的获取

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

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

连接流程

AVDTP连接阶段分为四步:

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

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

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

4、 建立该编码方式的AVDTP连接

AVDTP连接流程

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

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

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

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

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

安卓系统中关于媒体音频的架构类似于整个蓝牙系统,见下图:

蓝牙媒体音频系统架构(SINK)

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

获取id时序图

至此audiotrack session id就通过新增接口被相关应用获取,实现不同的功能。返回搜狐,查看更多

责任编辑:

android 获取蓝牙设备id_安卓蓝牙系统中如何获取蓝牙音乐的音频跟踪会话ID相关推荐

  1. vim的高级用法配置以及在系统中如何获取帮助

    vim的高级用法配置以及在系统中如何获取帮助 1 vim的三种模式 1.1 使用方法 1.2 vim模式 2 vim工作的基本配置 2.1 临时设定(set设定) 2.2 永久设定方式 3 搜索 4 ...

  2. 在Windows, Mac, Linux三种系统中分别获取wifi密码的方式

    在Windows, Mac, Linux三种系统中分别获取wifi密码的方式 1. Windows netsh wlan show profile name=wifi名称 key=clear | fi ...

  3. android 获取蓝牙设备id_【报Bug】安卓平台获取不到蓝牙设备服务列表(ios可以)...

    产品分类: uniapp/App PC开发环境操作系统: Windows PC开发环境操作系统版本号: win10 HBuilderX类型: 正式 HBuilderX版本号: 3.0.7 手机系统: ...

  4. android 版本分布 最新,安卓手机系统版本分布:Android 9.0占比达34%!

    原标题:安卓手机系统版本分布:Android 9.0占比达34%! 如今,就国内智能手机市场来说,华为.小米.OPPO.vivo等智能手机厂商不仅在硬件配置上激烈较量,比如采用最新的处理器,再比如手机 ...

  5. vivo21a点击android版本,vivoX21适配安卓P系统

    许多小伙伴们应该都是知道最近即将推出的Android P系统吧,这个系统十分的强大,如果你使用的是vivoX21那么你就有福利了,你可以使用vivoX21 Android P升级这个系统.Androi ...

  6. android 根据时间获取周几_android 调用系统 calendars 如何获取一个指定日期的所有日程 event。...

    android 调用系统 (CalendarContract)calendars 如何获取一个指定日期的所有日程(包含周期事件) ? 难点在于,很多event存的时候是有rrule的,也就是周期. 以 ...

  7. android版本如何升级包,安卓手机系统怎么升级?安卓手机系统升级教程

    安卓手机系统怎么升级 随着系统的更新换代,相信不少网友对安卓系统的升级都很感兴趣,而这里指的一般都是通过刷机来升级,好像不刷就浑身不舒服一样.安卓系统升级可以在电脑上面下载官方的升级包,或者像小米系统 ...

  8. Android Studio 源码移植到系统中

    参考文章:https://blog.csdn.net/weixin_44008788/article/details/120990207 主要是添加 Android.mk文件,指定src.res.An ...

  9. android切换账户功能,安卓9系统开启多用户 android 9支持多用户切换吗?

    android 9支持多用户切换吗? 消息说是支持的呢 Android中的APP如何实现多帐号切换? 这个并不难,你可以同时在服务器的数据库中关联一个主键下的多个账户,每一个账户都有唯一的主键,用主键 ...

最新文章

  1. 【问题收录】ImportError No module named MySQLdb 问题解决
  2. python难度大的题_早看少被坑!Python 最难的问题
  3. GC之二--GC是如何回收时的判断依据、shallow(浅) size、retained(保留) size、Deep(深)size...
  4. mysql 5.7 解决 set global slow_query_log=on;报错
  5. java 类对象可以调用静态方法吗
  6. 气象背景场_“把脉”风雨 服务为民——甘肃研究型气象预报业务体系发展扫描...
  7. [NodeJs] 如何获取项目的根路径?
  8. ubuntu 设置静态路由_Linux系统添加永久静态路由的方法
  9. [R时间序列]ARMA模型如何分辨拖尾与截尾
  10. 一个合理的生产环境的 Web 应用程序应该是什么样子的
  11. System.SetString - 获取字符串
  12. EMC-电磁兼容-电磁骚扰的耦合机理
  13. poj3294Life Forms
  14. 新手小白如何短时间内熟练运营微信公众号
  15. 如果看广告还有钱拿,你还会嫌广告太多么?
  16. 基因组大数据变异检测算法的并行优化
  17. 数据库分表分库策略和原则
  18. 微课录制软件哪个好用?微课制作方法分享
  19. 软电话测试工具:SIPP
  20. [附源码]Java计算机毕业设计SSM城市智能公交系统

热门文章

  1. mysql创建索引降序_Mysql中的降序索引底层实现
  2. 构建具有丰富功能的交互式 Kiosk
  3. 物体成瘾性_如何克服数字成瘾和更多的意志力
  4. 【交互设计】什么是微交互
  5. 两部苹果手机同步照片_苹果手机误删照片怎么恢复?
  6. python-linux-获取多台远端机器指定文件并下载至本地(s**y-日志审计)
  7. cura切片操作学习
  8. 沧小海深入剖析xilinx的GTP/GTX核,掌握高速串行收发机制——第六章 接收端结构及功能说明
  9. SendCloud从注册到邮件发送使用心得
  10. 网上流传“魔方文化启示录”