一、AVRCP概述
1、Profile简介
AVRCP(Audio/Video Remote Control Profile)定义了蓝牙设备和audio/video控制功能通信的特点和过程,另用于远程控制音视频设备,底层传输基于AVCTP传输协议。该Profile定义了AV/C数字命令控制集。命令和信息通过AVCTP(Audio/Video Control Transport Protocol)协议进行传输。
AVRCP子协议的作用是支持CT(contorller devices)控制TG(target devices),CT通过指令控制TG播放音乐,比如蓝牙耳机是CT,而手机可以作为TG。具体来说如果手机和一个蓝牙音箱设备连接上了,那么音箱可以控制手机播放/暂停/切歌以及获得手机上播放歌曲的信息,如专辑,歌名,歌手,时长、播放/暂停/下一曲/上一曲,以及获取播放状态等信息。
设备角色:
CT(controller)设备:通过发送命令帧到目标发起传输。如PC,PDA,电话, 车载系统,耳机,播放/录音设备。
TG(target)设备:接收命令并按命令响应的设备,如播放/录音设备,电视,耳机等。
2、SDP 服务配置
手表作为音频源,一般为TG端。且AVRCP Supported Features 是Category 1。
(1)播放/录音功能 Category 1
无论媒体类型(磁带、光盘、固态等)或内容类型(音频或视频等)如何,都定义了播放器或记录器的基本操作;
(2)监视器/放大器功能Category 2
视频监视器或者音频放大器的基本操作;
(3)调谐器功能Category 3
音视频调谐器的基本操作;
(4)菜单功能Category 4
菜单功能的基本操作在类别 4 中定义。未指定显示菜单数据的方法。 它可能是设备本身的显示面板,也可能是外接显示器上的屏幕显示(OSD) ;
Event监听:比如TG发送STATUS CHANGE到CT后,CT处理完事件,又要通过RegisterNotification向TG重新注册STATUS CHANGE ,TG和CT都要通过RegisterNotification 监听相应的事件通知。
二、绝对音量(absolute volume)
1、概念
蓝牙音频的总音量,是由手机设备音量与蓝牙音量两部分组成,我们手机侧边键能直接调节的音量为手机设备音量,通过对蓝牙设备进行操作达到调节音量目的为蓝牙设备音量。如果仅调节其中一方,就会出现“已经把手机音量调节到最大但听歌时蓝牙耳机里面的声音还是很小”的情况。
蓝牙音频的音量由手机音源的音量与蓝牙设备的音量叠加而得,然而在日常使用的,多数用户会忽略其中一方的音量调节,尤其是蓝牙设备的音量,“绝对音量”功能设计的初衷是为了解决这个问题。
通常手机端和耳机端都有属于自己的音量,而绝对音量(Absolute Volume)指的蓝牙耳机和手机连接播放音频时双方音量同步,也就是当手机端音量调到最大时,耳机端的音量也是最大,绝对音量也称媒体音量同步。支持绝对音量的手机和耳机,他们除了可以自己调节自己音量大小外,还可以由对端来调节自己的音量大小。
2、蓝牙音乐音量调节
(1)音频数据增益
将手机端调节的多媒体音量大小,转化为音频数据的音量增益来间接达到控制音量,最终的音量大小为音频数据音量增益和远端设备本身的音量设置共同作用的结果。下图为播放蓝牙音乐时手机上调节音量大小后,远端设备上接收到的音频数据。
(2)绝对音量控制
通过绝对音量控制可以实现CT和TG两端的音量设置同步改变,多见于IOS系统(默认采用蓝牙绝对音量控制),安卓系统上该功能是默认关闭,需要主动进入开发人员选项中将蓝牙绝对音量开关打开,或者连接上蓝牙设备后,点击设备名后面设置按钮,进行打开。
绝对音量:Absolute volume,使CT和TG两端的音量等级相同,允许CT端展示音量等级,该功能主要提供了如下两个命令来处理音量。
SetAbsoluteVolume:设置绝对音量,音量变化的一方主动将音量等级设置到对方。
RegisterNotification:注册音量变化的通知事件,来观察音量变化,对方音量等级改变后通过监听来改变本端的音量等级。
这套绝对音量控制逻辑的运行完全依赖GT端(手机,手表等中心设备),即手机通过命令SetAbsoluteVolume设置当前的绝对音量值到设备端,并且通过注册通知音量事件监听CT端的音量变化。第二次及之后的SetAbsoluteVolume指令就可以实现手机改变蓝牙设备音量大小的功能,那如何实现蓝牙设备反过来改变手机的音量大小呢?该功能的实现就依赖手机注册的音量通知事件了,当设备端改变音量后通过RegisterNotificationResponse告知手机后,手机就会主动改变自身的音量值。
耳机端调节音量:
手机向耳机发起注册通知(AV/C Notify),如果耳机端音量有改变,耳机会发送AV/C CHANGED进行响应,如果在100ms内,不能进行响应,则会先发送INTERIM(会将此刻的音量回复给手机)进行告知,当耳机端音量实际变化时会发送CHANGED事件给到手机。13:39:36:300 耳机音量发生变化,发送给手机。
手机需要将自己的音量同步给耳机(Set Absolute Volume),AV/C Control(46%),第一次发送该命令是手机同步音量,并不是手机端音量发生了变化。
因为本次音量Change 在上一次Notify中上报,此时手机再次注册下一次Notify,耳机将此刻音量返回(AV/C Interim 49%)。
手机端调节音量:
手机直接下发set absolute volume指令。