本篇我们不讲协议,不剖析安卓源码,就简单认识下实际蓝牙音乐中涉及的常用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常用指令就简单分享到这,以上指令配合使用基本能满足蓝牙音乐应用的需求,更多命令的学习使用留待大家在实际项目中体会。感兴趣的小伙伴欢迎私信留言一起讨论,共同学习,一起进步!