零. 概述
主要介绍下蓝牙协议栈(bluetooth stack)传统蓝牙音频协议之高质量音频分布协议(A2DP) 概念介绍,包括在协议栈中的架构,角色以及Source到Sink的发送Audio流程
一. 声明
本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下:
第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。
第二篇:Transport层介绍,主要介绍蓝牙协议栈跟蓝牙芯片之前的硬件传输协议,比如基于UART的H4,H5,BCSP,基于USB的H2等
第三篇:传统蓝牙controller介绍,主要介绍传统蓝牙芯片的介绍,包括射频层(RF),基带层(baseband),链路管理层(LMP)等
第四篇:传统蓝牙host介绍,主要介绍传统蓝牙的协议栈,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的协议吧。
第五篇:低功耗蓝牙controller介绍,主要介绍低功耗蓝牙芯片,包括物理层(PHY),链路层(LL)
第六篇:低功耗蓝牙host介绍,低功耗蓝牙协议栈的介绍,包括HCI,L2CAP,ATT,GATT,SM等
第七篇:蓝牙芯片介绍,主要介绍一些蓝牙芯片的初始化流程,基于HCI vendor command的扩展
第八篇:附录,主要介绍以上常用名词的介绍以及一些特殊流程的介绍等。
另外,开发板如下所示,对于想学习蓝牙协议栈的最好人手一套。以便更好的学习蓝牙协议栈,相信我,学完这一套视频你将拥有修改任何协议栈的能力(比如Linux下的bluez,Android下的bluedroid)。
-------------------------------------------------------------------------------------------------------------------------
CSDN学院链接(进入选择你想要学习的课程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144
蓝牙交流扣扣群:970324688
Github代码:https://github.com/sj15712795029/bluetooth_stack
入手开发板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708
蓝牙学习目录:https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900
--------------------------------------------------------------------------------------------------------------------------
二. A2DP概念
A2DP(Advanced Audio Distribution Profile)是蓝牙高音质音频传输协议,用于传输单声道,双声道音乐(一般在A2DP中用于stereo双声道),典型应用为蓝牙耳机。。A2DP不包括远程控制的功能,远程控制的功能参考协议AVRCP。整个架构如下:
在我们协议栈的位置见红框:
A2DP是基于AVDTP协议。
三. A2DP角色
A2DP的角色分为Source(SRC)跟SINK(SNK)
Source (SRC) – A device is the SRC when it acts as a source of a digital audio stream that is delivered to the SNK of the piconet.
Sink (SNK) – A device is the SNK when it acts as a sink of a digital audio stream delivered from the SRC on the same piconet.
上面解释的也很清楚,说点白话点,就是谁发送音频数据谁就是Source,谁接收音频数据谁就是Sink,举一个例子:假设手机连接蓝牙耳机播放音乐,那么手机就是做A2DP source角色,蓝牙耳机就是做A2DP sink角色。
三. Audio Path(Source到Sink音频发送流程)
官方文档是给的这个,其实这个有点误导性(只要是不全),我来重新总结下Audio从source发送到sink的流程。
我们来大体总结下整个流程:
1)A2DP source的发送流程
UL收集到PCM数据,然后发送到A2DP,A2DP经过codec PCM lib(SBC,MPEG-1,2 AudioMPEG-2, 4 AACATRAC family或者自定义encoder pcm lib)压缩成特定的音频格式,然后交给AVDTP,AVDTP转交给L2CAP,L2CAP通过ACL格式转交给HCI,然后到达BT chip,通过RF射频出去。
2)A2DP sink的接收流程
BT chip通过RF接收进来数据,然后通过ACL交给HCI,然后交给L2CAP,L2CAP交给AVDTP,AVDTP交给A2DP,A2DP收到的是remote经过压缩的数据,此时通过codec pcm lib(SBC,MPEG-1,2 AudioMPEG-2, 4 AACATRAC family或者自定义encoder pcm lib)解压成PCM数据,然后交于声卡播放