蓝牙电话之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协议--转

相关推荐
千枫s1 分钟前
kali怎么制作所有长度的爆破字典
网络·网络安全
云飞云共享云桌面7 分钟前
研发部门使用SolidWorks和ug,cad,设计共享云桌面应该怎么选?
运维·服务器·网络·人工智能·3d
BullSmall13 分钟前
linux 系统下模拟网络丢失和ping延迟,可以怎么来模拟
linux·网络·php
亚空间仓鼠14 分钟前
OpenEuler系统常用服务(十)
linux·运维·服务器·网络
同聘云14 分钟前
阿里云国际站 服务器的“客户端” (Client) 和 “服务器” (Server)到底是什么?有什么区别?
服务器·网络·阿里云·云计算·云小强
KevinCyao24 分钟前
app视频短信接口如何集成?提升移动端APP用户促活的视频短信方案
音视频·视频短信
潜创微科技--高清音视频芯片方案开发25 分钟前
2026年主流HUB芯片服务商选型评估能力分析
音视频·硬件工程
ZGi.ai26 分钟前
一个LLM网关需要处理哪些工程问题?多模型路由与成本归因实战
大数据·网络·人工智能
BioRunYiXue27 分钟前
AlphaGenome:DeepMind 新作,基因组学迎来 Alpha 时刻
java·linux·运维·网络·数据库·人工智能·eclipse
weixin1997010801630 分钟前
《好看视频商品详情页前端性能优化实战》
前端·性能优化·音视频