天天看點

藍牙音樂之A2DP

藍牙音樂之A2DP

藍牙音樂之A2DP

本篇文章簡單聊聊藍牙音樂涉及到的A2DP協定,大家平常使用藍牙耳機聽音樂就是通過該協定實作的,此協定有時也被稱為媒體音頻協定。通過手機藍牙設定中已連接配接的裝置可以檢視具體連接配接的哪些協定,那其中的媒體音頻那一項就對應于本期所要分享的A2DP協定。

A2DP:Advanced Audio Distribution Profile,進階音頻分發協定的簡寫,在這裡大家需要區分開進階音頻和藍牙音頻,藍牙音頻一般指傳輸于藍牙SCO鍊路上的音頻,也就是藍牙電話;而進階音頻指的傳輸于藍牙ACL鍊路上的高品質音頻,即為藍牙音樂的媒體音頻,别再傻傻分不清藍牙音頻和進階音頻了哦。

一個完整的藍牙音樂不但包含A2DP音頻流,還包含AVRCP控制流,AVRCP後續再給大家分享,本期就重點聊聊藍牙音樂音頻流這點事。

A2DP協定本質上是一個應用層協定,它也是基于其他協定起作用的,詳細的協定依賴關系見下圖:

藍牙音樂之A2DP

A2DP協定核心概況:在藍牙核心協定的基礎上,通過上層A2DP協定将兩個藍牙裝置連接配接到同一個piconet(微微網)中,實作藍牙音樂音頻流的傳輸功能。

具體的協定模型如下:

藍牙音樂之A2DP

協定規定了兩種角色 SRC + SNK

  • SRC:Source,數字音頻流的源,負責将源資料發送到SNK端
  • SNK:Sink,數字音頻流的接收器,負責接收SRC發過來的源資料

這兩種角色的扮演者在生活中很是常見,手機藍牙作為生活中使用最多的裝置,不言而喻其主要作為SRC存在,那對應的藍牙耳機、音箱等裝置就作為SNK的角色存在,具體的音頻流如下圖所示:

藍牙音樂之A2DP

音頻流從SRC到SNK中間經曆的步驟很多,比如MP3、PCM、編碼、加密(可選)、資料封裝、傳輸、資料解析、解密(可選)、解碼、PCM等等步驟:

藍牙音樂之A2DP

音頻流傳輸過程中涉及到的最重要步驟就是編解碼,出于對資料的保護,在裝置間傳輸音頻資料時需要按照一定的格式将資料編碼,編碼後的資料到達接收方再按照相同的編碼格式進行解碼,将音頻資料解析成PCM播放。

藍牙音頻傳輸在當今市面上有如下幾種常見的編碼方式可供選擇:

藍牙音樂之A2DP

A2DP協定最早規定的基礎編碼方式也是強制性的編碼方式為SBC,AAC是由多家公司共同開發,蘋果裝置中對AAC有着廣泛的支援,aptX類的編碼方式的專利權屬于高通,而LDAC則是索尼大法在2015年推出的無線音頻編碼技術,LDAC也是衆多無線音頻編碼方式中最為接近無損編碼的方式。以上五種編碼方式傳輸的藍牙音樂音質從低到高排列為:

SBC < AAC < aptX < aptX-HD < LDAC

其實華為在2018年釋出P20手機時也推出過一種無線音頻編碼方式HWA(HiRes Wireless Audio),也被稱為LHDC,這是繼高通的aptX-HD和索尼的LDAC之後業界公認的第三種藍牙高音質編碼方式。但是華為内部在綜合考量下已經暫停了對HWA(LHDC)的支援,畢竟aptX-HD和LDAC相較于HWA支援更廣(使用者選擇aptX-HD或LDAC,他不香嘛)

從上述的協定模型中可以看出A2DP協定中最關鍵的就是AVDTP層,在協定中連接配接起應用層和藍牙核心協定層之間的互動,接下來就重點分析下AVDTP的相關互動知識點。

A2DP連接配接過程中涉及到多個AVDTP互動過程,我們已經知道由于藍牙音樂音頻流的單向流動性進而決定了SRC和SNK這兩種角色,而AVDTP的互動過程中也涉及到兩種角色:INT + ACP,簡單了解就是過程的發起者為INT,該過程的接收應答者則是ACP。由于A2DP連接配接的兩個裝置在連接配接之初由于其功能已經被應用層定義好,是以SRC、SNK的角色已被确定,而INT、ACP卻是根據過程的啟動而定,是以某一個藍牙裝置可能是INT也可能是ACP。

AVDTP:全程為 AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL,該協定定義了A/V流協商、建立和傳輸的過程,還指定了在這些裝置之間交換的消息格式,以便在A/V分布應用程式中傳輸它們的音視訊流。

AVDTP定義了如下這些互動過程:

藍牙音樂之A2DP

也定義了如下狀态,友善AVDTP的過程互動:

藍牙音樂之A2DP

這些狀态在互動過程的切換圖為:

藍牙音樂之A2DP

完整的A2DP連接配接包含如下幾個AVDTP過程:DISCOVER、GET_CAPABILITIES、SET_CONFIGURATION、OPEN。

  • DISCOVER:發現對端裝置内支援的流端點(編碼方式編号)
  • GET_CAPABILITIES:擷取所定義的流端點(SEP)的基本功能資訊
  • SET_CONFIGURATION:設定本次連接配接的配置(基于雙方支援的編碼方式,選取最優的編碼方式)
  • OPEN:成功配置後,建立A2DP連接配接打開音頻流

以上過程全部完成就建立起了AVDTP的信令通道,AVDTP随後也會建立起資料通道。

  • 信令通道:控制藍牙音樂音頻流的建立、打開、關閉、暫停等操作
  • 資料通道:傳輸藍牙音樂資料

A2DP在建立音頻流前如果遠端裝置的AVDTP版本未知,則裝置還需發起SDP服務查詢以在遠端裝置上獲得其支援的AVDTP版本。

完整的HCI互動流程見如下截圖:

藍牙音樂之A2DP

本篇我們就簡單分享了A2DP協定的建立以及AVDTP協定的相關了解。對此感覺的同學可以參考這兩篇藍牙官方文檔《A2DP_v1.3.2.pdf》、《AVDTP_SPEC_V13.pdf》。

感興趣的小夥伴歡迎私信留言一起讨論,共同學習,一起進步。

更多互聯互通技術,歡迎關注微信公衆号:Connectivity

藍牙音樂之A2DP

繼續閱讀