蓝牙音视频远程控制协议(AVRCP) command跟response介绍

news2024/12/28 3:59:45

 零.声明

本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:

第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。

第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等

第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等

第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。

第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)

第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等

第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展

第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。

另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。

-------------------------------------------------------------------------------------------------------------------------

蓝牙视频教程(跟韦东山老师合作):

https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.20.5aeb41f98e267j&id=693788592796

蓝牙交流扣扣群:765961169

Github代码:GitHub - sj15712795029/bluetooth_stack: 这是一个开源的双模蓝牙协议栈(bluetooth.stack)(btstack),可以运行在STM32,Linux.,包含HCI,L2CAP,SDP,RFCOMM,HFP,SPP,A2DP,AVRCP,AVDTP,AVCTP,OBEX,PBAP等协议,后续会继续维护,以达到商用的目的

入手开发板:https://shop220811498.taobao.com/category-1542116976.htm?spm=a1z10.5-c-s.w4010-22329603913.7.39ca7dbe2EA0K3&search=y&catName=%C0%B6%D1%C0%BF%AA%B7%A2%B0%E5#bd

蓝牙学习目录:一篇文章足够你学习蓝牙技术,提供史上最全的蓝牙技术(传统蓝牙/低功耗蓝牙)文章总结,文档下载总结(2020/12/11更新)_Wireless_Link的博客-CSDN博客_蓝牙eir

--------------------------------------------------------------------------------------------------------------------------

一. AVRCP command跟response

AVRCP特定的command有以下几种:

这么多PDU,我们不会一一介绍,只介绍几个典型的,其他的自己举一反三。

1. Capabilities

这个下面一共有一个实现

这个是AVRCP controller发给target的,来获取对端设备的能力,包括公司名称以及支持的event.整个数据格式如下:

获取公司ID response的格式为:

获取支持event的response格式为:

其中Capability EventID有:

我们介绍到notify的时候会详细介绍以上几个

我们结合前面的讲的vendor dependent格式来举例看下整个封包格式:

实际应用中我们一般只会用到Get Capabiliby for event,来获取对端支持的event,方便注册notify,可以看到上图支持播放状态改变,歌曲改变,播放器设置改变。当然在一般的代码中也会先获取支持的company然后再获取支持的event列表!

2. Notifications

2.1 GetPlayStatus

这个命令是controller像target发送获取播放状态的命令,返回值包括歌曲总长度,歌曲当前进度,以及播放状态,一共占用9byte(4byte歌曲长度,4byte当前进度,1byte播放状态)

我们来看下一个btsnoop

2.2 RegisterNotification

这个就是CT像TG注册消息,然后TG有对应的更新会通知,具体消息就是我们之前get capability with event的消息(需要注意的是:每次注册只能一次生效,收到change后要重新注册)我们在来贴下

我们来看下command、response的举例

我们来看一个流程图

下面我们就EVENT ID一个个来说下

EVENT_PLAYBACK_STATUS_CHANGED:播放状态改变,有以下值

EVENT_TRACK_CHANGED:歌曲名称改变

EVENT_TRACK_REACHED_END:歌曲到结尾

EVENT_TRACK_REACHED_START:歌曲开始

EVENT_ PLAYBACK_POS_CHANGED:歌曲播放进度变化

占4byte数据,是ms级别

EVENT_BATT_STATUS_CHANGED:电量状态改变,有以下值

EVENT_SYSTEM_STATUS_CHANGED:系统状态改变,有以下值

VENT_ PLAYER_APPLICATION_SETTING_CHANGED:播放器设置改变

其中AttributeID跟value对应如下:

3. Metadata Attributes for Current Media Item

这个主要是获取歌曲信息的(包括名称/专辑名/歌手名/歌曲索引/歌曲总个数等等)

AttributeID列表如下:

根据个数填上ID来获取不同的属性子项

注意两点:

  1. 如果格式填0,那么获取所有的属性
  2. 部分手机+部分播放器,比如iphone11+QQ音乐,Title会动态更新歌词

4. Volume handling

绝对音量用1个byte来表示,最高位(bit7)保留使用,所以范围是0x0~0x7f,0x0代表0%,0x7f代表100%,所以一个可读达标0.784%,其实这里我觉得设计的有点奇怪,为啥不用一个可读是1%,这样还方便统计!当然也是个人看法啦!好了,我们来看看其中的技术细节吧!

4.1 SetAbsoluteVolume

这个是用来设置绝对音量的命令,通过Pass throught命令来发送,正常搭配A2DP sink角色的AVRCP应该做controller角色,也就是可以通知上一首/下一首/播放/暂停等功能,但是这里比较特殊,需要A2DP sink搭配的AVRCP角色是TG端,所以一般要支持这个feature,需要AVRCP要做双角色,也就是AVRCP CT/TG!另外这个命令是AVRCP CT发送给TG的,所以如果是手机连接耳机,那么是手机作为CT角色发送给耳机的TG角色,这点尤其要注意,如图所示:

4.2 Notify Volume Change

注册notification时间的消息由AVRCP的controller角色发起,AVRCP的TG角色有音量变化,会通知到CT角色,当然这里也是作为双角色来做,我们还是拿手机连接耳机这个例子来说明,也就是手机还是作为AVRCP的CT角色,耳机作为AVRCP的TG角色。如果所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2047626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧运维:数据中心可视化管理平台

图扑智慧运维数据中心可视化管理平台,实时监控与数据分析,优化资源分配,提升运维效率,确保数据中心的安全稳定运行。

Linux进程间通信——匿名管道

文章目录 进程间通信管道匿名管道匿名管道使用 进程间通信 进程设计的特点之一就是独立性,要避免其他东西影响自身的数据 但有时候我们需要共享数据或者传递信息,传统的父子进程也只能父进程传递给子进程信息 因此进程间通信还是很必要的,…

Apollo9.0 PNC源码学习之Planning模块—— Lattice规划(三):静态障碍物与动态障碍物ST图构建

参考文章: (1)Apollo6.0代码Lattice算法详解——Part4:计算障碍物ST/SL图 (2)自动驾驶规划理论与实践Lattice算法详解 1 计算障碍物ST/SL图 计算障碍物ST/SL图主要函数关系图: // 通过预测得到障碍物list auto ptr_prediction_querier = std::make_shared<Predict…

2024新型数字政府综合解决方案(五)

新型数字政府综合解决方案通过集成人工智能、大数据、区块链和云计算技术&#xff0c;打造了一个智能化、透明化和高效的政务服务平台&#xff0c;旨在提升政府服务的响应速度、处理效率和数据安全性。该方案实现了跨部门的数据共享与实时更新&#xff0c;通过智能化的流程自动…

Waterfox vG6.0.8 官方版下载和安装步骤(一款响应速度非常快的浏览器)

前言 Waterfox 水狐浏览器&#xff0c;从字面上我们可以轻松的了解该款浏览器的一些特点。Waterfox是通过Mozilla官方认证的纯64位版火狐浏览器&#xff0c;而Waterfox 10采用Firefox 10官方源码编译而成&#xff0c;改进了大内存和64位计算的细节&#xff0c;在64位Windows系…

用Python读取Excel数据在PPT中的创建图表

可视化数据已成为提高演示文稿专业度的关键因素之一。使用Python从Excel读取数据并在PowerPoint幻灯片中创建图表不仅能够极大地简化图表创建过程&#xff0c;还能确保数据的准确性和图表的即时性。通过Python这一桥梁&#xff0c;我们可以轻松实现数据自动化处理和图表生成&am…

MyBatis全解

目录 一&#xff0c; MyBatis 概述 1.1-介绍 MyBatis 的历史和发展 1.2-MyBatis 的特点和优势 1.3-MyBatis 与 JDBC 的对比 1.4-MyBatis 与其他 ORM 框架的对比 二&#xff0c; 快速入门 2.1-环境搭建 2.2-第一个 MyBatis 应用程序 2.3-配置文件详解 (mybatis-config.…

软件需求设计分析报告(Word原件)

第1章 序言 第2章 引言 2.1 项目概述 2.1.1 项目背景 2.1.2 项目目标 2.2 编写目的 2.3 文档约定 2.4 预期读者及阅读建议 第3章 技术要求 3.1 软件开发要求 3.1.1 接口要求 3.1.2 系统专有技术 3.1.3 查询功能 3.1.4 数据安全 3.1.5 可靠性要求 3.1.6 稳定性要求 3.1.7 安全性…

练习:python条件语句、循环语句和函数的综合运用

需求描述&#xff1a; 期望输出效果&#xff1a; 练习成果&#xff1a; #简单的银行业务流程 many 50000 def main_menu():print("----------主菜单----------"f"\n{name}您好&#xff0c;欢迎来到ATM&#xff0c;请选择操作&#xff1a;""\n查询余…

鼠标手势软件,效率办公必备!移动鼠标即可执行命令

鼠标手势软件是一种通过在屏幕上绘制特定手势来触发预设操作或命令的工具&#xff0c;它能够极大地提高用户的操作效率&#xff0c;特别是在进行重复性工作时尤为明显。这类软件通常支持多种手势操作&#xff0c;如拖拽、双击、滚动等&#xff0c;并允许用户自定义手势以适应个…

【Linux】系列入门摘抄笔记-8-权限管理chmod/chown

Linux操作系统中文件的基本权限由9个字符组成&#xff0c;分别为属主、属组和其他用户&#xff0c;用于规定是否对文件有读、写和执行权限。 文件/目录的权限与归属 目录列表中&#xff0c;有9列 第一列&#xff1a;文件类型与权限&#xff08;共10个字符&#xff0c;分为四组…

RAG完整构建流程-从入门到放弃

RAG完整构建流程 LLM模型缺陷&#xff1a; ​ 知识是有局限性的(缺少垂直领域/非公开知识/数据安全) ​ 知识实时性(训练周期长、成本高) ​ 幻觉问题(模型生成的问题) ​ 方法&#xff1a;Retrieval-Augmented Generation&#xff08;RAG&#xff09; ​ 检索&#xff1…

网络安全实训第三天(文件上传、SQL注入漏洞)

1 文件上传漏洞 准备一句话文件wjr.php.png&#xff0c;进入到更换头像的界面&#xff0c;使用BP拦截选择文件的请求 拦截到请求后将wjr.php.png修改为wjr.php&#xff0c;进行转发 由上图可以查看到上传目录为网站目录下的upload/avator,查看是否上传成功 使用时间戳在线工具…

有哪些好用的桌面管理

Fences&#xff08;适用于Windows&#xff09;&#xff1a; Fences 是一个非常流行的 Windows 桌面组织工具&#xff0c;它允许用户将图标、文件、文件夹等拖放到名为“Fences”的区域中&#xff0c;从而保持桌面的整洁有序。Fences 还支持自动隐藏空白的 Fences&#xff0c;以…

PC端实现语音识别功能

场景需求&#xff1a; 点击录音按钮&#xff1a; 如没有检测到录音设备&#xff0c;提示&#xff1a;“无法找到麦克风设备&#xff0c;请检查设备连接”。如录音设备连接正常&#xff1a;录音按钮变成录制状态&#xff0c;开始录制声音&#xff0c;同时输入框禁止键盘输入。 再…

修改esxi root用户密码

登录vcenter&#xff0c;鼠标右键点击主机&#xff0c;选择主机配置文件------提取主机配置文件 然后对提取的文件输入一个名称清晰容易分辨的名称&#xff0c;如xxx主机修改密码配置文件。 选择顶部的菜单&#xff0c;选择“策略和配置文件” 选择左侧的主机配置文件&#xf…

Oracle导入dmp文件

文章目录 写在前面一、详细知识点1、dmp文件2、导出dmp文件2.1、exp和expdp区别2.2、exp导出操作2.3、expdp导出操作2.4、PL/SQL使用客户端导出2.4.1 特殊说明2.4.2 操作指引 3、导入dmp文件3.1、imp和impdp区别3.2、imp导入操作3.3、impdp导入操作3.4、PL/SQL使用客户端导入 二…

语言无界,沟通无限:2024年翻译软件新趋势

无论是商务洽谈、学术研究、旅游探险&#xff0c;还是日常交流&#xff0c;高效、准确的翻译工具都成为了人们不可或缺的助手。百度翻译在线翻译是我最早接触的翻译工具&#xff0c;这次我们就一起找寻还有哪些好用的翻译工具吧。 1.福晰在线翻译 链接直达>>https://fa…

[4.10]-AutoSAR零基础学习-(SHE)Secure Hardware Extension规范<2>- Memory update protocol

既然已经看到这篇文章&#xff0c;说明开始研究SHE的安全更新协议了&#xff0c;协议具体去看原文吧&#xff0c;下面的工具是自己实现的桌面工具&#xff0c;可以在多平台使用&#xff0c;支持SHE&#xff0f;SHE / SHE_Extend&#xff0c;协议可自行定制。 >总目录<

亚马逊账户运营:揭秘那些你应该知道的坑。

在亚马逊平台上&#xff0c;选品过程与选择竞争对手的策略相似&#xff0c;都需要深思熟虑。许多卖家在选品时&#xff0c;会广泛收集并分析各种数据&#xff0c;但有时过于依赖数据而忽略了产品的实际竞争力和市场适应性。结果&#xff0c;他们可能选中了在理论上很理想&#…