大家好,欢迎来到IT知识分享网。
AVRCP使用AV/C command set(AV/C Digital Interface Command Set)来实现;
AVRCP的实现需要GAP协议的支持;
browsing channel不是必须的,可根据双方协商是否建立,它在control channel建立后才可建立;
CT和TG都可以发起一个AVCTP的L2CAP信道建立,这个事件是被外部触发的,比如开机事件;
如果两个设备同时打开AVCTP信道,这时需要先同时关闭,然后两个设备经过一个随机时间后在尝试打开;
如果browsing channel存在,则需要在释放control channel之前先释放browsing channel;
上图说明了命令流程,有两点需要注意:
a、AV/C interim response可能在VENDOR DEPENDENT命令时返回,其他命令不会返回interim response;
b、在某些情况下,TG不会响应response;
4、命令类型:
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命令
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)我们先看下AVRCP四种命令类型的帧格式:
另一种是browsing channel,格式如下:
笔者用耳机与手机连接,抓包后过滤只显示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 );
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/119236.html
























