基于AVDTP信令分析蓝牙音频启动流程

前言

公司项目edifier那边需要在原来音频SBC,AAC基础上增加LHDC5.0编码,在打通lhdc协议栈之前,学习记录一番AVDTP音频服务流程。


一、AVDTP音频流基础知识

分析音频流程首先应具备的最简单基础概念知识:AVDTP信令signal,流端点sep

二、流程分析

先上我打通的SBC+LHDC5.0协议在手机主动连接耳机情况下的爱丽丝截图:

从图中可以看到,AVDTP的音频流程其实并不复杂,主要有5个步骤: 手机发现耳机(Discover)、分别获取耳机各个配置包(get capability)、设置手机和耳机所使用的配置、打开(开始)流端点和手机发送数据流。如下图红色框框部分:


AVDTP启动音频流流程做以上6个步骤分析:

1、AVDTP_DISCOVER:

该步骤ellisys数据如下:


 首先sink接收到src的AVDTP_DISCOVER信令之后,会返回当前sink的avdtp所有的流端点ID包,包的内容只是简单的告诉src该类型的端点使用的流端点ID,流媒体数据类型,端点状态等信息。上面所使用的流端点结构avdtp_sep_info_t 如下:


typedef struct seid_info {
	uint32_t rfa0:1;
	uint32_t inuse:1;
	uint32_t seid:6;
	uint32_t rfa2:3;
	uint32_t type:1;
	uint32_t media_type:4;
}__attribute__ ((__packed__))  seid_info_t;

typedef struct avdtp_sep_info {
	uint8_t       	state;
	seid_info_t    	info;
}__attribute__ ((__packed__)) avdtp_sep_info_t;

由此可见每个端点占用3个byte的payload,上图抓包显示的6个bytes数据,获取到的是sbc+lhdc  2个端点信息。

2、AVDTP_GET_CAPABILITIES

 AVDTP_GET_CAPABILITIES信令需要返回具体流端点的配置信息,如上图返回的是sbc流端点的配置,其配置内容根据标准sbc数据配置包属性确定,内容包括媒体类型,音频类型,采样率等等信息。

3、AVDTP_SET_CONFIGURATION

    AVDTP_SET_CONFIGURATION信令用来设置耳机端使用的配置,用来告诉耳机你该用哪种音频的配置来进行解析、解码我的数据包。在上一步耳机上传了配置包之后,手机会拿耳机所支持的数据类型(AAC 、 SBC or LHDC)跟手机本身支持的数据类型对比,然后选择恰当的数据类型进行音频传输,同时耳机端也会根据该信令的配置配置好本地的解码器,准备接收手机端数据进行解码播放。耳机端确认好配置包之后,回传accept命令包给手机。

4,AVDTP_START

该信令告诉耳机端,数据流开始,并且返回accept包。

5,media stream

媒体流传输并非avdtp信令内容,其内容主要是传输音频数据包!至此,耳机和手机启动音频传输过程完成。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值