近几年新能源车载火出了天际,各个厂商新势力转战新能源!

车载设备开发,软件娱乐系统,离不开蓝牙,对蓝牙稳定性要求也越来越高,对于车载使用蓝牙音乐的功能,主要有以下这些,通过AVRCP控制歌曲暂停、播放、上一曲、下一曲,同步手机端歌曲信息 进度、作者、歌词、播放状态、音量同步等

经常也会遇到以下的一些问题:

车载点击暂停/播放,为什么几秒后才暂停/播放?

车载点击暂停/播放,为什么实际没有暂停/播放?

车载点击暂停,实际声音暂停,歌曲信息一直在更新,为什么?

车载进度position和手机端不同步?

车载播放显示歌曲信息和手机端不一致?

车载进度position 2-3s 跳动一次,为什么?

车载播放歌曲作者显示成歌词,为什么?

车载播放不显示歌曲歌词信息等?

希望在以下的讲解中能够自行找到答案,另外AVRCP中 CT TG概念,通知 event等请在以前文章中自行翻阅,不再重复解释,下面进入正文

1.播放

播放的按键触发为一组按下抬起动作,对应btsnoop为首先车载host下发play的Button Pushed手机回应accept,随后按键抬起车载host下发Button Released,对应手机accept,完成播放按键的下发

按键下发不代表音乐成功播放,此时手机端过来一个CHANGE的回应,携带的play status为playing状态,则成功从车载端触发播放,一开始注册通知事件EVENT PLAYBACK STATUS CHANGED则是在AVRCP刚连上的时候,INTERIM为paused状态,change playing事件完成后,一组通知结束,车载host继续注册通知EVENT PLAYBACK STATUS CHANGED,手机controller回复INTERIM(中间态)为playing状态,等待下一次的change response

2.暂停

暂停的按键事件也是对应一组按下抬起,与play有差异的则是Operation Id标志为pause

接播放的interim---playing状态,此时手机端过来EVENT PLAYBACK STATUS CHANGED的change事件,把播放状态切换为paused状态,此时标志暂停成功,然后继续重复注册下一次通知

3.上一曲

同样是一组键值按下抬起,Operation Id为backward,然后是暂停状态下切歌,手机会直接过来更新通知至playing状态拉起播放,另外切歌会对应一组EVENT TRACK CHANGED的通知变化

 4.下一曲

对应Operation Id为forward,且是在播放状态切歌,此时我们可以看到,手机端先更新了一下paused状态再更新为playing状态,但值得注意的是蓝牙用于传输音频数据的AVDTP则一直处于start状态未进行suspend

5.歌曲进度position

蓝牙音乐的歌曲信息position在连上AVRCP时就会注册通知

参数:Playback interval in seconds: 1(告诉手机端需要1s更新一次position给车载)

实际Android源码中一般默认为2s/3s更新一次,那歌曲进度会一直2-3s跳动一下进度吗?实际不会,车载端 Android还会通过get play status 每秒去获取手机端播放状态和进度,如果不去每秒get play status,则会出现2-3s跳进度条问题,所以直接设置Playback interval in seconds为1,每秒更新则可以完美解决该问题

手机端从controller每1s更新position通知,同时车载host每秒去Get Play Status更新position

6.歌曲信息

蓝牙通过Get Element Attribute去更新歌曲信息,获取歌曲时长、标题、作者、歌词等信息

车载端蓝牙AVRCP获取音乐信息btsnoop 分析相关推荐

  1. Android 10 手机端控制车载蓝牙音乐上一首、暂停、下一首、获取音乐信息等流程

    需求:手机端音乐暂停和播放状态从服务端告诉客户端.设备端实现暂停.播放.上一首.下一首等功能 代码路径: packages/apps/Bluetooth/src/com/android/bluetoo ...

  2. 手把手教你做音乐播放器(三)获取音乐信息

    第3节 获取音乐信息 在"视频播放器"的开发过程当中,我们已经学会了如何获取视频文件的信息: 定义一个视频信息的数据结构VideoItem: 自定义一个AnsycTask,在它的工 ...

  3. Android 蓝牙 -- 还原网络设置 删除蓝牙所有存储配对信息流程分析---全网唯一

    同学,别退出呀,我可是全网最牛逼的 Android 蓝牙分析博主,我写了上百篇蓝牙文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦. 一.概述 当 ...

  4. js如何实现扫描身份证识别_移动端扫描身份证获取获取身份证信息。

    移动端扫描身份证获取身份证信息(前端部分) 最近做了个扫描身份证的功能主要分以下几个步骤 1:使用H5+调用手机底层相机拍照功能 if(window.plus){ playCamera(); }els ...

  5. Android之使用MediaMetadataRetriever类获取媒体信息

    一.昨天,介绍了使用MediaMetadataRetriever类来获取视频第一帧: http://blog.csdn.net/u012561176/article/details/47858099, ...

  6. 叮叮获取所有用户信息_钉钉小程序获取用户信息

    1.钉钉小程序只允许开发办公类的程序,不能开发娱乐型的程序. 2.钉钉小程序审核需要产品说明书,最大大小不能超过30M(文档). 3.貌似可以用IP,暂时没有看到有关https的限制. (业务提供商( ...

  7. 钉钉小程序获取用户信息

    钉钉小程序获取用户信息 1.钉钉小程序只允许开发办公类的程序,不能开发娱乐型的程序. 2.钉钉小程序审核需要产品说明书,最大大小不能超过30M(文档). 3.貌似可以用IP,暂时没有看到有关https ...

  8. C#开发BIMFACE系列9 服务端API之获取应用支持的文件类型

    系列目录     [已更新最新开发文章,点击查看详细] BIMFACE最核心能力之一是工程文件格式转换.无需安装插件,支持数十种工程文件格式在云端转换,完整保留原始文件信息.开发者将告别原始文件解析烦 ...

  9. Zjh游戏(十三)获取用户信息

    添加获取用户信息的子操作码 using System; using System.Collections.Generic; using System.Linq; using System.Text;n ...

最新文章

  1. 出色管理者的时间管理
  2. Git远程操作详解【转】
  3. 互联网+激发连锁酒店竞争意识 OTA遭遇对抗危机
  4. 【单调栈 动态规划】bzoj1057: [ZJOI2007]棋盘制作
  5. ASP.NET Core服务器综述
  6. 做最好的自己——读书笔记
  7. 底层技术革命是如何爆发的?_转
  8. Codeforces Round #246 (Div. 2) D. Prefixes and Suffixe 后缀数组
  9. 清华大学计算机系本科自考,清华大学自考专业有哪些
  10. C语言 定时器的原理,单片机定时器作用原理及学习应用详解
  11. 数字信号处理之数字混频
  12. 前端开发JS--匀速运动
  13. 百度实时主动推送url
  14. Houdini学习笔记——【案例二】消散文字制作
  15. 张侠博士:运用云计算进行颠覆式创新,打破企业数字化转型壁垒
  16. 工业互联网与工控安全
  17. 《大学的意义》一些摘抄和感悟
  18. Spark sql之开窗函数
  19. 中医,较为严谨的定义
  20. python爬取抖音评论_使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)

热门文章

  1. 文件上传漏洞揭密剖析(一)-文件上传漏洞原理
  2. ipv6 socket python网络编程
  3. final修饰的变量就是常量?
  4. 安装 arm nginx aarch64
  5. epsfallback_5G语音回落4G解决方案探讨
  6. 遗传算法求解香蕉函数的极大值
  7. aliyun cloud ide
  8. JVM 报 GC Overhead limit exceeded 是什么意思?
  9. 关于Canal的过滤机制
  10. fonts/fontawesome-webfont.woff2 404