AVRCP对于实现设备间的高效音频/视频控制至关重要。而控制互操作性要求作为AVRCP的核心部分,详细规定了设备在连接建立、命令传输等方面的具体操作。确保了不同设备之间能够实现无缝的远程控制。
一、AVCTP连接管理
1.1 AVCTP连接建立
- 发起者:AVCTP控制通道的L2CAP连接建立可以由控制器(CT)或目标设备(TG)发起。内部事件或用户操作(如开机)可以触发连接建立。


- 浏览通道:如果设备支持浏览通道,则应在控制通道建立后立即建立浏览通道。控制通道必须始终在浏览通道之前建立。

-
延迟优化:从优化性能角度看,建议控制通道建立后立即建立浏览通道,这样能有效避免发送浏览命令时出现较大延迟。但在一些特殊场景中,若浏览功能使用频率很低,设备为了节省资源,也可以选择按需打开浏览通道。同时,浏览通道需配置为使用L2CAP增强重传模式,以确保数据传输的可靠性。
-
冲突处理:在连接建立过程中,若双方设备同时尝试打开AVCTP通道,为避免冲突,两个通道都要关闭,然后各自等待一个随机时间(100ms到1s之间)后再重新尝试打开。若能确定哪个设备是中央设备,那么该设备可直接重试。并且,需要注意的是,AVCTP实体之间只能建立一个用于控制的L2CAP连接和一个用于浏览的L2CAP连接(前提是双方都支持浏览功能),若连接已存在,CT或TG就不应再发起连接请求了。
1.2 AVCTP连接释放

-
**发起者:**AVCTP控制通道的L2CAP连接释放同样可以由CT或TG发起。内部事件或用户操作(如关机)可以触发连接释放。
-
浏览通道释放:当存在浏览通道时,必须先释放浏览通道,然后才能释放控制通道。当然,如果不再需要浏览通道,也可以单独释放它而不影响控制通道。而且,只要控制通道还存在,当再次需要浏览功能时,浏览通道是可以重新建立的。
二、AV/C命令的操作流程
2.1 AV/C命令交换流程

-
连接建立:当CT检测到内部事件或者用户操作,并且此时连接尚未建立时,CT就需要先发起连接建立操作。一旦连接建立,即可发送AV/C命令。
-
命令响应:TG在接收到命令后,根据命令类型返回相应的响应。对于某些命令,可能返回中间响应。
2.2 AV/C命令类型
在AV/C命令的交互过程中,可能会涉及到以下几种命令:

-
UNIT INFO命令:CT端为可选支持(O),TG端为必须支持(M)。该命令用于获取AV/C单元的整体信息,TG的响应帧会包含自身的厂商ID以及最能描述该单元的子单元类型信息。通过厂商ID,CT在使用VENDOR DEPENDENT命令之前可以先了解TG的厂商信息。例如,一个VCR设备,即便它有调谐器功能,但在响应UNIT INFO命令时,可能返回的单元类型是磁带录音机/播放器。
-
SUBUNIT INFO命令:在CT端和TG端的支持情况与UNIT INFO命令相同(CT:O;TG:M)。它主要用于获取AV/C单元的子单元信息。如果设备支持多个子单元(当设备同时存在其他配置文件时可能会出现这种情况),CT可以通过这个命令来发现这些子单元,从而实现对AV/C功能的探索。
-
VENDOR DEPENDENT命令 :若支持3.1 - 10到3.1 - 15中的任何一项功能,该命令在CT和TG端都为必须支持(C),否则为可选支持。这个命令允许模块厂商根据AV/C帧中包含的AV/C地址,为AV/C单元或子单元指定自己的一套命令和响应。
-
PASS THROUGH命令:在CT和TG端均为必须支持(M)。它是AVRCP的一个重要特性,TG中只能有一个面板子单元,CT通过这个命令,依据用户的操作,以特定的与CT相关的方式来控制面板子单元。用户在设备的显示屏上进行操作或者按下按钮,CT就会将这些操作命令发送给面板子单元,面板子单元接收到命令后会执行相应的操作。面板子单元的主要作用是将用户的操作命令转化为内部操作,这些操作会影响其他子单元或整个单元,并以TG特定的方式将其调度到合适的子单元或单元中,最终可能会对媒体流产生影响。
三、AVRCP特定命令
AVRCP定义了一系列特定命令,用于实现更复杂的控制功能和元数据处理。这是对AV/C数字接口命令集通用规范的扩展,它通过在1394规范的框架内定义VENDOR DEPENDENT和PASS THROUGH命令来实现。为了与真正的厂商特定命令区分开来,使用了蓝牙SIG的厂商ID。通过这种扩展,实现了更复杂的控制功能,并且能够处理诸如歌曲和艺术家信息等元数据。
AVRCP定义了一系列特定命令,用于实现更复杂的控制功能和元数据处理。这些命令包括但不限于:
- Capabilities:获取设备能力。
- Player Application Settings:获取和设置播放器应用设置。
- Metadata Attributes for Current Media Item:获取当前媒体项的元数据属性,如歌曲标题、艺术家名称等。
- Notifications:注册和接收通知,如播放状态改变、曲目变化等。
- Continuation:请求和终止连续响应,以处理大量数据。
- Absolute Volume:设置绝对音量。
- MediaPlayerSelection:选择媒体播放器。
- Browsing:浏览媒体库,如获取文件夹项、总项目数等。
- Search:搜索媒体项。
- NowPlaying:获取当前播放的媒体项信息。
四、AVRCP浏览命令
AVRCP浏览命令定义了直接在AVCTP上使用的命令,用于使CT浏览TG设备上的媒体,并对特定媒体项执行操作。这些命令直接通过AVCTP使用,不依赖于AV/C,并且AVCTP浏览通道不使用分片技术。
五、OBEX连接管理
5.1 OBEX连接建立
AVRCP不对OBEX L2CAP通道的建立时间施加限制。然而,由于BIP图像句柄仅在BIP封面艺术连接的生命周期内有效,因此在成功检索BIP图像句柄之前必须存在OBEX级连接。
5.2 OBEX连接释放
AVRCP不对OBEX L2CAP通道的关闭时间施加限制。然而,当OBEX级连接关闭时,在该OBEX连接期间检索的BIP图像句柄将不再有效。强烈建议在仅因释放图像句柄而断开OBEX连接时,不断开底层L2CAP通道,以减少延迟和UID更改过程中的开销。
六、总结
AVRCP的控制互操作性要求涵盖了连接、命令等多个关键方面,它们相互协作,确保了蓝牙设备在音频/视频控制场景下能够实现稳定、高效的交互。
七、参考资料
AVRCP 1.6.3:可在蓝牙技术联盟官方网站或者https://download.csdn.net/download/weixin_37800531/90046059?spm=1001.2014.3001.5503获取。
希望通过这篇博客,能帮助大家更好地理解AVRCP控制互操作性的相关知识,也欢迎大家在评论区分享自己的见解和经验。