A2DP 介紹
A2DP(Advanced Audio Distribution Profile)是藍牙高音質音頻傳輸協定, 用于傳輸單聲道, 雙聲道音樂(一般在 A2DP 中用于 stereo 雙聲道) , 典型應用為藍牙耳機。
A2DP旨在通過藍牙連接配接傳輸高品質的立體聲音頻流。它使用的基本壓縮算法是SBC(Sub-Band Coding)來減小音頻資料的大小,同時保持高音質,SBC壓縮雖然效率較低,但是是必須支援的基本備用方案。A2DP還支援其他進階編解碼器,例如AAC、aptX和LDAC,這些編解碼器比SBC提供更好的音質,但這些編解碼器的支援取決于裝置本身的支援情況。
注意A2DP協定要與AVRCP協定區分開。 A2DP是傳輸音頻的,而AVRCP是用來控制音頻的。
藍牙架構如下圖:
角色介紹
A2DP 的角色分為 Source(SRC) 和 SINK(SNK) : 發送音頻的稱為 Source,接收音頻的稱為Sink。 例如手機連接配接藍牙耳機播放音樂, 那麼手機就是做 source 裝置,藍牙耳機就是sink 裝置。
資料流
音頻資料流互動如上圖:
● A2DP source 的發送流程
SOURCE端 收集到 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 射頻出去。
● A2DP sink 的接收流程
SINK端通過 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 資料, 然後交于聲霸卡播放 。
A2DP編碼資料傳輸格式
編碼格式支援
A2DP 協定必須支援SBC格式, 其他的格式是可選的,支援的格式如下:
SBC 編碼格式介紹
下面重點介紹下A2DP協定中SBC的編碼的element資料協定格式,其他格式不做說明。element的整個資料格式如下:
下面具體分析下每個字段的含義:
Sampling Frequency: 這部分是采樣頻率, Source 端強制要求 44.1KHz, 48KHz 支援一種, Sink要求 44.1KHz,48Khz 都支援, 對應的值如下圖:
通道模式: Sink端要求全支援。
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 的碼率 :
Sink端應該将2作為最小的bitpool值,最大的bitpool值應該等于上圖中的高編碼品質中的的bitpool值。
SBC資料流格式
SBC資料流是由一個頭部和資料流(或者)組成。
頭部Header的長度是一個位元組, bit字段如下圖:
F bit : 表示是否被分包, 分包為1, 不分包為0
S bit: 表示是否起始分包 起始分包為1 否則為0
L bit : 表示否是是最後一個分包。 為1表示是最後一個分包, 否則為0
Number of frames : 表示分包數。
●如果F bit為0,即資料不分包,則該字段表示的是資料包的幀數。
●如果F bit 為1,即資料分包,則該字段表示的是資料包剩餘的分包數(包括目前分包)。
其他編碼格式咱不做介紹。。。