本篇我们不讲协议,不剖析安卓源码,就简单认识下实际蓝牙音乐中涉及的常用AVRCP指令。

播放、暂停、上下首切歌指令都是成对出现的,模拟按钮的按压态,点击pressed,释放released,成对出现的两条AVRCP指令完成一个动作。

1、AVRCP Play

播放蓝牙音乐,使用AVCTP的AV/C格式的命令走控制通道

2、AVRCP Pause

暂停蓝牙音乐,同播放指令一样使用AV/C格式的命令走控制通道


实际使用中由于CT端可能会快速发送两次播放或暂停指令,会触发部分TG端设备(如手机)执行了相反的操作。对应以上场景需要加以规避更好的提供蓝牙音乐功能。

3、AVRCP Forward

切歌到下一首,数据交互走控制通道。

4、AVRCP Backward

切歌到上一首,数据交互走控制通道。

5、AVRCP Get Element Attributes

获取歌曲信息,比如歌手、歌名、专辑名、歌曲总时长等详细信息,采用AV/C格式的命令走控制通道。

6、AVRCP Get Item Attributes

同样是获取歌曲信息,但是采用的是浏览格式的命令走浏览通道。

7、AVRCP Get Play Status

获取当前的播放状态,包括歌曲总时长、当前播放的进度条、播放状态等信息,采用AV/C格式的命令走控制通道。

该指令由于获取歌曲播放的进度条信息,所以需要循环请求,在安卓源码 rc_start_play_status_timer() 中通过每隔 2s 的定时器实现该功能。

8、AVRCP Get Capabilities

获取远端设备AVRCP的能力,比如公司名、支持的事件,采用AV/C格式的命令走控制通道。

9、AVRCP Register Notification

注册通知,将GT端支持的事件注册成功后,如果该事件改变会自动通知到CT端,从而做出正确的处理,依然是采用AV/C格式的命令走控制通道。

10、AVRCP Get Folder Items

获取文件夹列表,比如媒体播放器列表、文件系统列表等。蓝牙音乐主要通过浏览命令走浏览通道获取媒体播放器列表,其会返回当前可用的媒体播放器名,及其支持的功能。

AVRCP常用指令就简单分享到这,以上指令配合使用基本能满足蓝牙音乐应用的需求,更多命令的学习使用留待大家在实际项目中体会。感兴趣的小伙伴欢迎私信留言一起讨论,共同学习,一起进步!