主要介紹下藍牙協議棧(bluetooth stack)傳統藍牙音頻協議之高質量音頻分布協議(A2DP) SBC編解碼算法 Codec Specific Infomation Elements。

?
本專欄文章我們會以連載的方式持續更新,本專欄計劃更新內容如下:

第一篇:藍牙綜合介紹 ,主要介紹藍牙的一些概念,產生背景,發展軌跡,市面藍牙介紹,以及藍牙開發板介紹。
第二篇: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學院鏈接(進入選擇你想要學習的課程):
藍牙交流扣扣群:970324688
Github代碼:
入手開發板:
藍牙學習目錄:
--------------------------------------------------------------------------------------------------------------------------
在A2DP協議中有以下規定:

首先所有設備強制規定必須有SBC的codec算法,這個是有損算法,音質跟MP3差不多,之所以一直保留在現在,是因為最開始的藍牙就有SBC,我個人感覺算是一種紀念性意義以及兼容性意義,紀念性意義不用說,我們來提下兼容性意義,為什么說兼容性意義呢,設想一個下,Local設備跟Remote設備假設都支持更高音質,更小壓縮損耗的算法,但是算法不同,在AVDTP的時候就無法建立握手的動作,但是有了SBC就能保證一點了,你們其他音頻算法不匹配,但是至少有SBC可以用,至少可以出聲音哦!
另外還支持3中可選算法,MPEG-1,2 audio/MPEG-2,4 AAC、ATRAC family,當然還有一些自定義擴展codec算法,比如比較流行的APTX,LDAC等。
我們本書暫時不對Codec算法來深入研究,我們只是來說明下部分參數,教你怎么用起來,至于音頻算法,我覺得是一門很深的學問,我自己也hold不住。
SBC是藍牙強制規定支持的協議,其中Codec Specific Infomation Elements定義如下:

Sampling Frequency:這部分是采樣頻率,Source端強制要求44.1KHz,48KHz支持一種,Sink要求44.1KHz,48Khz都支持,每個值對應的如下

Channel Mode:通道數

Sink要求全支持,而Source只強制要求支持Mono,其他可選
Block Length:塊長度

Subbands:次頻帶

Allocation Method:配置方法

Minimum Bitpool Value:
Maximum Bitpool Value:
在播放設備中可以設置 SBC 編碼質量,這個值叫 bitpool,大概 1 bitpool = 6~7 kbit/s。SBC 是一種復雜度較低的編碼格式,同等碼率下音質稍差,根據的比較,最高 328 kbit/s 的 SBC 音質大約介于 224 kbit/s 到 256 kbit/s 的 MP3 之間。此外,設置不當、信號差、設備不支持高 bitpool 等都會造成傳輸碼率下降而使音質下降,耳機或音箱本身的音質也是很重要的因素。以下為不同的bitpool的碼率

A2DP media封包格式為:

?