【AVRCP】规范精讲[18]: 从字节到交互,全流程拆解AVRCP命令与响应实战
在蓝牙音频开发的世界里,很多开发者都有过这样的经历:对着一堆十六进制的字节流发呆,不知道这些数字到底代表什么意思;或者调试了几天,发现只是因为某个命令的某个字节填错了,导致整个功能无法正常工作。AVRCP协议作为蓝牙音频控制的核心,其命令和响应的格式设计非常精巧,但也非常容易出错。
目录
一、AVRCP命令响应的基本框架
1.1 AVCTP帧头格式
1.2 AVRCP命令体格式
1.3 AVRCP响应体格式
1.4 一个最简单的完整示例
二、直通命令(Pass Through Commands)详解与示例
2.1 直通命令的基本格式
2.2 常用直通命令示例
2.4 直通命令的常见问题
三、通用命令(General Commands)详解与示例
3.1 单元信息命令(Unit Info)
3.2 子单元信息命令(Subunit Info)
3.3 通用命令的实际应用
四、播放状态与控制命令详解与示例
4.1 获取播放状态命令(Get Play Status)
4.2 播放控制命令
4.3 跳转命令(Jump)
4.4 播放控制命令的常见问题
五、媒体信息命令详解与示例
5.1 获取媒体属性命令(Get Media Attributes)
5.2 媒体信息通知
5.3 媒体信息命令的常见问题
六、浏览命令详解与示例
6.1 浏览命令的基本概念
6.2 获取文件夹内容命令(Get Folder Items)
6.3 播放项目命令(Play Item)
6.4 浏览命令的实际应用
七、绝对音量命令详解与示例
7.1 绝对音量命令的基本原理
7.2 音量变化通知
7.3 绝对音量命令的优势
7.4 绝对音量命令的常见问题
八、高级命令详解与示例
8.1 重复模式命令(Repeat Mode)
8.2 均衡器命令(Equalizer)
8.3 现在播放列表命令(Now Playing List)
8.4 高级命令的兼容性问题
九、错误响应与处理
9.1 错误响应的基本格式
9.2 常见错误代码详解
9.3 错误处理的最佳实践
十、代码示例:Android中解析和构造AVRCP命令
10.1 构造并发送播放命令
10.2 解析AVRCP响应
10.3 注册广播接收器
十一、测验
很多人都知道AVRCP有播放、暂停、上一曲、下一曲这些基本功能,但很少有人真正见过这些功能在底层是如何通过字节流来传输的。规范中提供了上百个完整的命令和响应示例,这些示例是我们理解AVRCP协议最宝贵的资源。本文我们就来逐字节拆解这些示例,从最基础的直通命令到最复杂的浏览命令,彻底搞懂AVRCP命令与响应的每一个细节。
一、AVRCP命令响应的基本框架
在深入具体的命令示例之前,我们首先需要建立一个清晰的AVRCP命令响应框架。所有的AVRCP命令和响应都遵循完全相同的基本格式,理解这个格式是读懂所有示例的基础。
1.1 AVCTP帧头格式
所有的AVRCP命令和响应都封装在AVCTP帧中进行传输。AVCTP帧头长度为3个字节,格式如下:
