藍牙音樂AudioTrack Session ID的獲取

當今這個音視頻無處不在的時代,音頻跟蹤會話ID(AudioTrack Session ID)是個很重要的參數,可以用來實現音頻相關的一些特效。接下來的內容我們就探究如何在安卓藍牙系統中獲取該id。

熟悉藍牙音樂播放流程的同學都瞭解藍牙音樂AVDTP的控制流與音頻流以及AVRCP是如何作用的,以如下的交互圖簡單介紹下:
在這裏插入圖片描述

AVDTP連接階段分爲四步:

1、 發現對端支持的編碼方式有哪幾種

2、 獲取每種編碼方式的參數

3、 雙方協商確定一個最優的編碼方式

4、 建立該編碼方式的AVDTP連接
在這裏插入圖片描述

音頻播放過程中只要創建的audiotrack不變則對應的session id就會保持不變。播放藍牙音樂也是這樣。那藍牙音樂對應的audiotrack
session id從哪兒獲取呢?

創建audiotrack都會生成對應的session id,那問題就簡單多了,藍牙音樂播放過程中audiotrack在哪兒被創建的?

藍牙音樂播放分爲source、sink兩端,source一般爲音頻流輸出端,sink接收音頻流方。這篇文章主要是已sink端來講解藍牙音頻播放流程。Sink方(藍牙耳機、音響、車載等)的藍牙芯片接收到音頻流後通過HCI送到藍牙協議棧,在協議棧中直接通過audio track送入安卓音頻系統播放音樂。

結合藍牙協議棧的代碼可以快速找到audio track的創建處爲:BtifAvrcpAudioTrackCreate(),通過sp<android::AudioTrack>
track可以實現session id的獲取。

那如何將該id送到application層呢?這塊就需要我們瞭解安卓藍牙系統中媒體音頻的架構,從而添加接口來獲取session id。

安卓系統中關於媒體音頻的架構類似於整個藍牙系統,見下圖:
在這裏插入圖片描述

根據上面的系統架構圖,則獲取audiotrack session id的接口主要和framework、service、JNI以及Bluedroid中btif都有關係。大概的時序圖如下:

在這裏插入圖片描述
至此audiotrack session id就通過新增接口被相關應用獲取。

更多互聯互通技術,歡迎關注微信公衆號:Connectivity
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章