天天看點

藍牙音樂之A2DP音頻流

藍牙音樂之A2DP音頻流

藍牙音樂之A2DP音頻流

A2DP音頻流的建立已經在《藍牙音樂之A2DP》中做了簡單分享,本篇我們主要來說說音頻流中兩個重要的過程:開始、暫停

由于音頻流表示一種單向媒體資料,那麼音頻流兩端的裝置就顯式地承擔起 SRC 或 SNK 的角色,而裝置具體的角色則取決于上層應用程式和應用場景。生活中最常見的 SRC 裝置必然是手機了,SNK 裝置則是各種各樣的藍牙耳機、音箱等。

A2DP協定是基于AVDTP協定的上層協定,A2DP的動作最終都是通過AVDTP實作的,而AVDTP協定中關于過程的角色可以簡單分為兩方:INT(過程發起者)、ACP(過程應答者)

藍牙音樂開始和暫停就涉及到AVDTP中如下兩個過程:

AVDTP_START:開始藍牙A2DP音頻流傳輸,這個過程有兩個用途

  1. 音頻流建立打開時,該信号被用來啟動音頻流
  2. 當音頻流被暫停時,該信号用于重新啟動音頻流

AVDTP_SUSPEND:暫停藍牙A2DP音頻流傳輸

接下來分别對這兩個過程從消息互動和狀态切換等方面加以分析。

一、AVDTP_START

音頻流建立完成(AVDTP_OPEN)後,啟動音頻流的過程觸發流啟動,進而SRC和SNK兩端可以交換媒體(報告、恢複)資料包,該過程可以由參與音頻流連接配接的任何裝置啟動。

SRC開始音頻流,音頻流兩端的消息互動為:

藍牙音樂之A2DP音頻流

兩者的狀态機切換如下:

藍牙音樂之A2DP音頻流

SNK開始音頻流,兩端的消息互動則為:

藍牙音樂之A2DP音頻流

雙方的狀态機切換為:

藍牙音樂之A2DP音頻流

從以上兩種情況下可以看出,作為ACP,隻有在應答接受該開始過程後,狀态機才切換到STREAMING,而作為INT過程發起者,SRC和SNK的狀态切換時機是有差異的。

二、AVDTP_SUSPEND

音頻流開啟後使用該信号可以暫停音頻流的傳輸,SRC或SNK都可以啟動該過程。過程互動如下:

藍牙音樂之A2DP音頻流

狀态機切換見下圖:

藍牙音樂之A2DP音頻流

通過AVDTP的信令通道成功開始音頻流後,SRC端就可以通過AVDTP的資料通道将藍牙音樂音頻資料源源不斷的發送到SNK端,SRC和SNK兩端對藍牙音樂音頻資料按照 AVDTP_SET_CONFIGURATION 過程中設定的編碼方式進行編碼、解碼操作。大緻的傳輸框圖如下:

藍牙音樂之A2DP音頻流

A2DP音頻流的開啟、暫停過程及音頻資料傳輸的協定分享到這裡就結束了,感興趣的同學歡迎私信留言一起讨論,共同學習,一起進步!

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

藍牙音樂之A2DP音頻流

繼續閱讀