蓝牙电话之HFP—电话音频

1 媒体音频:

播放蓝牙音乐的数据,这种音频对质量要求高,数据发送有重传机制,从而以l2cap的数据形式走ACL链路。编码方式有:SBC、AAC、APTX、APTX_HD、LDAC这五种编码方式,最基础的编码方式是SBC,支持蓝牙多媒体播放的设备必须支持该编码方式,编码质量最好的是LDAC。编码方式的选取需要蓝牙连接设备间的互相协商确定。

2 电话音频:

蓝牙通话过程的语音数据,这种音频对时效性有高要求,一般通过特殊的SCO或eSCO链路传输数据。编码方式有:CVSD、mSBC。最基础的编码方式为CVSD,免提蓝牙设备都需支持该编码方式,支持宽带语音的设备可选mSBC编码数据。

1 编码格式

CVSD:该编码方式的数据传输使用SCO或eSCO链路。链路的选取是根据本端Controller是否支持Enhanced Setup Synchronous Connection指令来决定的,如果支持该命令则创建语音音频链路时使用eSCO,否则创建SCO链路。

mSBC:该编码方式的数据传输只能使用eSCO链路。

2 安卓策略

音频链路SCO或eSCO创建成功后,蓝牙系统会以 AUDIO_STATE_CHANGED 的广播通知注册过的应用,并且HF侧的蓝牙芯片会将接收到的语音数据通过PCM接口送入audio系统,那系统的audio模块是如何操作避免多音源输出呢 ?

这其实还是和蓝牙电话应用密切相关的,蓝牙电话收到音频链路创建成功的广播后通过AudioManager.requestAudioFocus()申请到系统的音频焦点后,audio模块会根据申请焦点的stream type判断其级别,高级别的音源可以打断低级别的音源(比如:听音乐时打电话,会先暂停掉音乐)。蓝牙电话还需要通过AudioManager.setMode()接口通知audio底层打开通话通道,从而播放出通话语音。

蓝牙电话一般还会有个电话静音功能,开启静音功能后,本端可以听到对方的语音,但对方听不到本端的语音,这样一个功能其实只需要将本端的收音设备给静音掉就可实现。AudioManager.setMicrophoneMute()设置true,将Mic静音。

由于蓝牙电话语音的传输途径为:phone Audio -> PCM -> AG基带 -> HF基带 -> PCM -> Audio,以及反方向。那么语音数据都是在底层传输的,上层基本涉及不到,从而开发蓝牙电话时获取语音数据就显得尤为困难,但方法也是有的。

3 sco 与 esco

sco 不支持重传,esco支持重传
Android 蓝牙 HFP sco 和esco链路的异同分析

4 HFP协议

目前HFP的使用场景有车载蓝牙,耳机和PDA,定义了AG和HFP两种角色。

AG(Audio Gate)音频网关---音频设备输入输出网关

HF(Hands Free)免提---该设备作为音频网关的远程音频输入/输出机制,并可提供若干遥控功能。

在车载蓝牙中,手机侧是AG,车载蓝牙侧是HF,在android源代码中,将AG侧称为HFP/AG,将HF侧称为HFPClient/HF。
蓝牙协议--HFP协议--转

相关推荐
纽格立科技7 分钟前
2025全球DRM数字广播战略实施全景——印尼篇(地缘特征主导下的数字骨干网构建)
网络·科技·音视频·信息与通信·传媒
heartbeat..11 分钟前
Spring MVC 全面详解(Java 主流 Web 开发框架)
java·网络·spring·mvc·web
qq_ceiling24 分钟前
H3C交换机配置M-LAG
运维·服务器·网络
线束线缆组件品替网35 分钟前
Amphenol RF 同轴线缆:高频 RF 系统设计中 VSWR 与损耗控制实践
网络·人工智能·电脑·硬件工程·材料工程
hui函数1 小时前
如何解决 pip install 网络报错 ERROR: No matching distribution found for requests
网络·pip
changyunkeji1 小时前
电缆敷设,长云科技电缆输送机多台联控,专业解决方案提供
网络·科技
Python_Study20254 小时前
制造业数据采集系统选型指南:从技术挑战到架构实践
大数据·网络·数据结构·人工智能·架构
Black蜡笔小新5 小时前
全域互联:EasyCVR如何为多区域视频监控融合治理提供技术支持
音视频
非凡ghost5 小时前
MPC-QT视频播放器(基于Qt框架播放器)
开发语言·windows·qt·音视频·软件需求
蚂蚁吃大象6665 小时前
vmware虚拟机-网络模型
网络