上一篇文章我们看了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设置属性的一种机制,其形式为<attribute,value>,具体属性可参看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应尽快应答。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/13863.html