扩展阅读: 蓝牙电话HFP协议 - 知乎
HFP Spec下载: Hands-Free Profile | Bluetooth® Technology Website
1. 什么是 HFP 协议?
看看蓝牙官方的定义先
The Hands-Free Profile (HFP) specification defines a set of functions such that a Mobile Phone can be used in conjunction with a Hands-Free device (e.g., installed in the car or represented by a wearable device such as a headset), with a Bluetooth Link providing a wireless means for both remote control of the Mobile Phone by the Hands-Free device and voice connections between the Mobile Phone and the Hands-Free device.
Compliance with this specification assures interoperability between a Bluetooth enabled Hands-Free device and any Bluetooth equipped Mobile Phone supporting this profile.
也就是说,HFP 协议是蓝牙协议的一种,全称为 Hands-Free Profile。它是一种用于在蓝牙设备之间实现语音通信的协议,主要应用于车载蓝牙系统和耳机等设备。
2. HFP 协议的连接流程
-
L2CAP 连接:首先,客户端设备和 HFP 设备需要通过 L2CAP(Logical Link Control and Adaptation Protocol)协议建立连接。L2CAP 是蓝牙协议栈中的一个底层协议,用于提供透明数据通信服务。在 HFP 连接过程中,L2CAP 协议主要用于数据的传输和控制。
-
SDP 查找服务:在 L2CAP 连接建立之后,客户端设备需要通过 SDP(Service Discovery Protocol)协议查找 HFP 设备的服务信息。SDP 协议是蓝牙协议栈中的一个服务发现协议,用于在蓝牙设备之间发现可用的服务。通过 SDP 查找服务,客户端设备可以确定要连接的 HFP 设备是否支持 HFP 协议,并获取 HFP 设备的服务信息。
-
RFCOMM 连接:在确认 HFP 设备支持 HFP 协议后,客户端设备需要通过 RFCOMM(Radio Frequency Communication)协议建立连接。RFCOMM 协议是蓝牙协议栈中的一个串口模拟协议,用于在蓝牙设备之间建立虚拟串口连接。在 HFP 连接过程中,RFCOMM 协议主要用于 HFP 协议栈与蓝牙协议栈之间的数据交换。
-
HFP 协议连接:在 RFCOMM 连接建立之后,客户端设备和 HFP 设备之间就可以开始进行 HFP 协议连接了。HFP 协议栈是蓝牙协议栈中实现 HFP 协议的核心组成部分,它负责处理与 HFP 相关的音频编解码、通话控制、音量控制等功能,保证了蓝牙设备之间的语音通信质量和流畅度。通过 HFP 协议栈,客户端设备和 HFP 设备之间可以进行通话管理和音频传输等功能。
HF侧和AG侧进行连接通信具体流程如下图:
手机的音频的连接AG和HF侧都可以发起,连接过程中的消息交互及流程大体相同。上图的SLC(Service Level Connection)建立代表HFP连接成功。
3. HFP 协议的特点
HFP 协议主要有以下几个特点:
-
支持语音通信:HFP 协议主要用于在蓝牙设备之间实现语音通信,可以使得人们在驾车或者其他需要双手空闲的情况下,通过蓝牙设备实现通信。
-
音频编码:HFP 协议支持多种音频编码格式,如 CVSD、mSBC 等,可以根据具体的应用场景选择适合的编码方式。
-
通话控制:HFP 协议还支持通话控制,包括接听、挂断、拒接等功能,方便用户进行通话管理。
-
兼容性:HFP 协议是蓝牙协议中的一种标准协议,广泛应用于各种车载蓝牙系统和耳机等蓝牙设备之间的通信中,具有很高的兼容性。
4. HFP 协议的应用场景
HFP 协议主要应用于以下场景:
-
车载蓝牙系统:驾驶人员可以通过蓝牙连接手机,实现免提接听电话、语音拨号等功能,提高了驾驶安全性。
-
蓝牙耳机:通过蓝牙连接手机,实现无线语音通信,方便用户进行通话。
-
蓝牙手表:通过蓝牙连接手机,实现来电提醒、语音通话等功能,方便用户进行通信。
5. 在 Android 源码中的 HFP
在 Android 源码中,HFP 协议的实现主要涉及到以下几个方面:
-
蓝牙管理器(Bluetooth Manager):Android 系统通过蓝牙管理器实现对蓝牙设备的管理,包括扫描设备、连接设备、断开设备等操作。在 HFP 协议的应用场景中,蓝牙管理器通过蓝牙连接手机和车载蓝牙系统等设备,实现免提接听电话、语音拨号等功能。
-
蓝牙音频服务(Bluetooth Audio Service):蓝牙音频服务是 Android 系统中专门用于管理蓝牙音频的服务,其中包括了 HFP 协议的实现。在蓝牙耳机等设备连接到手机后,蓝牙音频服务通过 HFP 协议实现了音频的传输和控制,包括接听、挂断、拒接等功能。
-
HFP 模块(HFP Module):HFP 模块是蓝牙音频服务中实现 HFP 协议的核心模块。它负责处理与 HFP 相关的音频编解码、通话控制、音量控制等功能,保证了蓝牙设备之间的语音通信质量和流畅度。HFP 模块通过与蓝牙管理器和蓝牙音频服务的交互,实现了与蓝牙设备之间的通信和控制。
-
蓝牙电话应用(Bluetooth Phone Application):蓝牙电话应用是 Android 系统中专门用于处理与蓝牙电话相关的操作的应用程序。它通过与蓝牙音频服务和 HFP 模块的交互,实现了免提接听电话、语音拨号、通话记录等功能。
具体涉及到的类有:
类名 | 功能 |
---|---|
BluetoothHeadset | 用于与 HFP 设备之间进行连接和通信,提供了连接和断开连接、通话控制、音频传输等功能 |
BluetoothHeadsetClient | BluetoothHeadset 的客户端,提供了更全面的 HFP 操作支持,包括拒接来电、通话转移、远程音量控制等功能 |
BluetoothHeadsetService | BluetoothHeadset 和 BluetoothHeadsetClient 的服务类,负责管理 HFP 连接和状态,并提供了 HFP 操作的回调接口 |
HeadsetStateMachine | BluetoothHeadsetService 内部的状态机,用于处理 HFP 连接和状态的变化 |
BluetoothHandsfree | Android 系统中 HFP 协议栈的核心模块,负责处理与 HFP 相关的音频编解码、通话控制、音量控制等功能,保证了蓝牙设备之间的语音通信质量和流畅度 |
结语
HFP 协议是蓝牙协议中的一种标准协议,主要应用于车载蓝牙系统和耳机等设备的语音通信中。它支持多种音频编码格式和通话控制功能,具有很高的兼容性和灵活性,是实现蓝牙语音通信的重要手段之一。