【蓝牙专题】蓝牙AVRCP协议解析(二)

您所在的位置:网站首页 蓝牙音频协议对比分析 【蓝牙专题】蓝牙AVRCP协议解析(二)

【蓝牙专题】蓝牙AVRCP协议解析(二)

2024-07-12 02:46| 来源: 网络整理| 查看: 265

上一篇文章我们看了AVCTP协议,今天我们来具体看下AVRCP协议;

一、概述 1、定义:

AVRCP(Audio/Video Remote Control Profile),也就是音频/视频远程控制规范;

AVRCP使用AV/C command set(AV/C Digital Interface Command Set)来实现;

AVRCP的实现需要GAP协议的支持;

2、role

同AVCTP,AVRCP分为两个角色,CT(The Controller)是命令的发起方,命令接收方是TG(The target)

二、交互流程(可参考AVRCP spec 4) 1、建立连接流程

        AVCTP分为两种通道,control channel和browsing channel,两种信道分别传输AV/C命令和Browsing命令;browsing channel不能用来传输分组(分包)消息;

        browsing channel不是必须的,可根据双方协商是否建立,它在control channel建立后才可建立;

        CT和TG都可以发起一个AVCTP的L2CAP信道建立,这个事件是被外部触发的,比如开机事件;

        如果两个设备同时打开AVCTP信道,这时需要先同时关闭,然后两个设备经过一个随机时间后在尝试打开;

2、关闭连接:

        CT和TG都可以发起释放AVCTP的L2CAP信道的动作,这个动作也是由外部出发,比如关机事件;

        如果browsing channel存在,则需要在释放control channel之前先释放browsing channel;

3、命令流程

一旦建立了连接,CT就可以给TG发送命令;

上图说明了命令流程,有两点需要注意:

a、AV/C interim response可能在VENDOR DEPENDENT命令时返回,其他命令不会返回interim response;

b、在某些情况下,TG不会响应response;

4、命令类型:

UNIT INFO指令是把AV/C指令集作为一个整体获取信息。响应报文包含TG的设备供应商编号(Vendor ID)与子设备类型(Subunit Type),Subunit Type为具体的设备类型;

Subunit Info指令用来获取AV/C子集信息;

Vendor Dependent允许划分子集的指令与响应集;

AVRCP协议的一个特点就是就是通过Pass Though指令的Panel subunit(面板子集),The Panel subunit提供一个以用户操作来触发的模型,当用户触发事件后(按键),CT会发送命令给Panel subunit,Panel subunit会给出相应动作的应答;尽管在TG中会有许多subunits,但Panel unit一定只有一个;不同于其他subunit,Panel unit不直接参与处理media流,Panel unit独立于其他unit,用来传递用户动作,影响其他unit;

spec中给出了一些pass through command命令,如下图,这些命令分为两种,使用AV/C Ctype的的AV/C VENDOR DEPENDENT命令和browsing commands,他们分别使用control channel和browsing channel

AVRCP特定命令分为AV/C VENDOR DEPENDENT命令和browsing命令

        在PASS THROUGH命令对不同设备的支持的情况,在spec中有详细说明,这里只截取了一小部分,可以看到table中分了四类设备,分别是他们对PASS THROUGH的支持情况,在CT和TG端不同,注意区分:

三、协议格式 1、功能

在看协议之前,再来看下AVRCP的几个功能;

1)Target player application settings,为CT端提供了查询TG设置属性的一种机制,其形式为,具体属性可参看spec;

2)Metadata Attributes for Current Media Item,CT获取TG特定属性时可通过GetElementAttributes命令实现;

3)TG 事件notification,这个机制是当TG有事件发生时,用来通知CT的;

(a)CT可以获取TG播放状态;

(b)TG可被监控的状态有

播放状态:Playing,Paused,Stopped,Seek Forward,Seek Rewind,PlayBack Position change;

Track改变事件:Change of track,Start of track,End of track;

(c)设备插播事件;

(d)所有Player应用的属性都可以被注册到CT,当产生变化时,TG会通知CT;

(e)音量事件通知;

(f)终端player变化通知;

(g)player地址变化通知;

(h)UIDs改变通知;

(i)Content of Now Playing变化通知;

CT想TG提供NOTIFY指令集,TG需要向已经注册的NOTIFY指令集给CT发送INTERIM响应;occurrence注册事件,TG发送CHANGED响应报告状态;CT可以定期更新需要NOTIFY的命令;为了有效性,我们应该限制事件数量;

还有其他一些功能,如continuation commands,Group navigation,Absolute Volume,Media Player Selection,Now Playing等,这里就不详细看了,我们开发时遇到随时查下spec就可以,了解就好;

2、协议描述

1)定时器 所有AV/C传输都应遵循下列时间周期,除非有明确的特定。 TG应在收到任何AV/C命令的100ms内应答。 有些AVRCP指定的AV/C控制命令不能立刻应答,此时应在既定时间内返回一个有着初始应答码的INTERIM,其后紧跟最终应答。  TG生成1个控制命令的应答帧的时间周期是200ms。 TG生成1个通知命令的临时应答帧和状态命令的最终帧的时间周期是1000ms。 AVRCP特定浏览命令没有定义时间周期,但TG应尽快应答。

2)我们先看下AVRCP四种命令类型的帧格式:         看到这里没有糊涂吧,想下前一篇介绍的AVCTP帧格式,AVCTP只定义了头,具体信息部分是由具体协议决定,上面就是AVRCP的协议格式;

        下面来看具体的格式,前面我们提到两种信道对应两种命令,这里也对应着两种信道,在Control channel,所有命令和应答格式如下:

另一种是browsing channel,格式如下:

四、实例

上面看完了AVCTP和AVRCP协议,下面我们看一个实例来加深理解;

笔者用耳机与手机连接,抓包后过滤只显示AVCTP与AVDTP包,显示如下:

笔者后面会继续看下AVDTP协议,AVDTP中定义了流媒体初始化的过程,这里我们先关注Event Notification包,看看其具体是怎么发送的,我们展开一包来看:

笔者特意将上一篇中的AVCTP中的图拿过来,实际抓包和spec中图一对比,我们很容易理解AVRCP/AVCTP/L2CAP的作用,我们可以看到从具体AVRCP协议到AVCTP协议框架到L2CAP层的数据,首先这是一个AVRCP Event notification,PDUID是Event notification,然后根据PDUID找到这个包可以包含的事件:

上面两张图片可以和spec中的事件对应起来,下面两个图,你可以根据我们给出的AVCTP和AVRCP协议找到对应的字节吧?如果对应不起来,请再把上面两篇文章再来一遍吧(注:这里AVCTP使用了A/V Remote Control,其PDUID= 0x0e11 );



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3