天天看點

【經典藍牙】藍牙 A2DP協定分析A2DP 介紹A2DP編碼資料傳輸格式

A2DP 介紹

        A2DP(Advanced Audio Distribution Profile)是藍牙高音質音頻傳輸協定, 用于傳輸單聲道, 雙聲道音樂(一般在 A2DP 中用于 stereo 雙聲道) , 典型應用為藍牙耳機。

        A2DP旨在通過藍牙連接配接傳輸高品質的立體聲音頻流。它使用的基本壓縮算法是SBC(Sub-Band Coding)來減小音頻資料的大小,同時保持高音質,SBC壓縮雖然效率較低,但是是必須支援的基本備用方案。A2DP還支援其他進階編解碼器,例如AAC、aptX和LDAC,這些編解碼器比SBC提供更好的音質,但這些編解碼器的支援取決于裝置本身的支援情況。

注意A2DP協定要與AVRCP協定區分開。 A2DP是傳輸音頻的,而AVRCP是用來控制音頻的。



藍牙架構如下圖:



【經典藍牙】藍牙 A2DP協定分析A2DP 介紹A2DP編碼資料傳輸格式





角色介紹



        A2DP 的角色分為 Source(SRC) 和 SINK(SNK) : 發送音頻的稱為 Source,接收音頻的稱為Sink。 例如手機連接配接藍牙耳機播放音樂, 那麼手機就是做 source 裝置,藍牙耳機就是sink 裝置。



資料流





【經典藍牙】藍牙 A2DP協定分析A2DP 介紹A2DP編碼資料傳輸格式





音頻資料流互動如上圖:

● 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格式, 其他的格式是可選的,支援的格式如下:





【經典藍牙】藍牙 A2DP協定分析A2DP 介紹A2DP編碼資料傳輸格式







SBC 編碼格式介紹



下面重點介紹下A2DP協定中SBC的編碼的element資料協定格式,其他格式不做說明。element的整個資料格式如下:





【經典藍牙】藍牙 A2DP協定分析A2DP 介紹A2DP編碼資料傳輸格式





下面具體分析下每個字段的含義:



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







【經典藍牙】藍牙 A2DP協定分析A2DP 介紹A2DP編碼資料傳輸格式





通道模式: Sink端要求全支援。



【經典藍牙】藍牙 A2DP協定分析A2DP 介紹A2DP編碼資料傳輸格式



Block Length: 塊長度



【經典藍牙】藍牙 A2DP協定分析A2DP 介紹A2DP編碼資料傳輸格式









Subbands: 次頻帶



【經典藍牙】藍牙 A2DP協定分析A2DP 介紹A2DP編碼資料傳輸格式









Allocation Method: 配置方法



【經典藍牙】藍牙 A2DP協定分析A2DP 介紹A2DP編碼資料傳輸格式











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協定分析A2DP 介紹A2DP編碼資料傳輸格式





Sink端應該将2作為最小的bitpool值,最大的bitpool值應該等于上圖中的高編碼品質中的的bitpool值。





SBC資料流格式



SBC資料流是由一個頭部和資料流(或者)組成。





【經典藍牙】藍牙 A2DP協定分析A2DP 介紹A2DP編碼資料傳輸格式







頭部Header的長度是一個位元組, bit字段如下圖:



【經典藍牙】藍牙 A2DP協定分析A2DP 介紹A2DP編碼資料傳輸格式







F bit : 表示是否被分包, 分包為1, 不分包為0

S bit: 表示是否起始分包 起始分包為1 否則為0

L bit : 表示否是是最後一個分包。 為1表示是最後一個分包, 否則為0



Number of frames : 表示分包數。

●如果F bit為0,即資料不分包,則該字段表示的是資料包的幀數。

●如果F bit 為1,即資料分包,則該字段表示的是資料包剩餘的分包數(包括目前分包)。





其他編碼格式咱不做介紹。。。