藍牙音樂SRC端的安卓實現

2020-12-26 Connectivity

藍牙音樂SRC側的安卓實現

隨著電子產品的普及,越來越多的年輕人熱衷於使用藍牙技術來播放歌曲(相當多的手機品牌取消了耳機插孔),本篇文章就和大家聊聊藍牙音樂SRC端在安卓系統中的實現原理。

安卓系統參考版本:Android-9

藍牙SRC側播放藍牙音樂,音頻數據都是從安卓音頻系統發送過來的,藍牙協議棧接收到音頻數據處理再發送到SNK端進行播放,整體的流程大概如下圖所示:

紅色框圖標註的部分就是我們今天探討的內容,在對藍牙音樂SRC介紹之前,我們得簡單了解下安卓中音頻系統。安卓的audio系統播放音頻都是將數據發送到對應的輸出設備進行播放,藍牙自然也是其中一種音頻輸出設備,類似的輸出設備還有如下這些,源碼路徑:/system/media/audio/include/system/audio.h

這些音頻輸出設備通過HAL框架以一個個單獨的模塊存在於安卓系統中,音頻系統服務層 audioserver在初始化過程中通過HAL技術加載配置文件支持的模塊。這裡以藍牙a2dp為例具體分析下加載模塊的時序圖:

這樣音頻服務就和藍牙協議棧bluedroid建立聯繫,藍牙音樂播放的音頻數據就可以通過該路徑源源不斷地送入藍牙協議棧中進一步處理。

藍牙提供的音頻系統的動態連結庫為:audio.a2dp.default.so

源碼路徑:/system/bt/audio_a2dp_hw/

音頻系統初始化階段只會加載打開 audio.a2dp.default.so 獲取到a2dp模塊接口,至於打開輸出流只有在A2DP協議連接成功後才會執行。

從以上時序圖可以看到 audio.a2dp.default.so 運行在音頻服務的進程中,那其又如何與藍牙服務進程 com.android.bluetooth 交互呢?

跨進程通信有多種方式,audioserver 和 com.android.bluetooth 在藍牙音樂數據傳輸場景下通過 socket完成跨進程通信。

藍牙協議棧創建如下兩種socket與audioserver進行通信:

/data/misc/bluedroid/.a2dp_ctrl :控制socket,傳遞A2DP的控制信號/data/misc/bluedroid/.a2dp_data :數據socket,傳遞A2DP的音頻數據Bluedroid通過數據socket接收到audio發送過來的音頻數據後,根據A2DP連接時雙方協商確定的編碼方式對數據進行編碼操作,最終將編碼後的數據通過l2cap鏈路發送到SNK端。具體時序圖如下:

對音頻數據進行編碼的具體操作則在各編碼方式對應的處理函數中完成,源碼路徑參考:system/bt/stack/a2dp/a2dp_xxx_encoder.cc/a2dp_xxx_encode_frames(),xxx對應A2DP連接使用的編碼方式(SBC、AAC、aptX、LDAC等)。

數據最終在bta層 bta_av_data_path()處理函數中通過 p_scb->p_cos->data() 回調從 btif_a2dp_source_cb.tx_audio_queue 隊列中取出,數據隨後經過進一步封裝發送給SNK端,SNK再反向解碼出音頻流播放。

藍牙音樂SRC側的安卓實現大體上如此,感興趣的小夥伴歡迎私信留言一起討論,共同學習,一起進步!

相關焦點

  • 安卓手機與51單片機間藍牙通信的實現
    藍牙耳機今天分享下如利用藍牙4.0模塊建立安卓手機和51單片機間的藍牙通信。(1)安卓智慧型手機一部,只用是近幾年的智慧型手機都內嵌藍牙模塊,藍牙4.0及以上(2)任意51單片機最小系統都可使用,如下文連結。
  • 安卓車機如何用手機互聯實現投屏及反控(安卓手機)
    此篇轉載汽車之家領克01車主:天緣閣月老,感謝1、通常我們手機連接車機的方式為蘋果的Carplay和百度的Carlife,領克前兩種也可以實現
  • 熊小白玩安卓07期:華強北AirPods連接安卓手機也能實現彈窗動畫
    Bear Pop-up是一款專門針對安卓手機開發的藍牙耳機動畫彈窗軟體,可以讓安卓手機獲得類似蘋果AirPods那樣的彈窗效果,目前已經適配了蘋果、三星、華為、一加、魅族、小米、紅米等諸多品牌的藍牙耳機。
  • 目前實現安卓端轉移至IOS端
    而且隨著手機配置的開發在不斷進步,手機更新換代的間隔也在不斷縮短,一些玩家可能從蘋果轉成了安卓,一些從安卓轉蘋果,但是這時候伴隨而來的就是一些遊戲數據怎麼辦呢,不僅僅是《王者榮耀》大部分手機遊戲都是安卓ios不互通的,這導致我們遊戲內的數據(等級/角色/皮膚)等等無法得以繼承。但是,現在王者榮耀實現轉區啦!
  • 當下最好用、最穩定的音樂APP都在這裡了~【安卓+IOS端】
    酷W音樂破姐版(安卓)最新的酷w音樂破姐版!不得不說酷w真的是太倒黴了哈哈,出一個版本被破一個版本,太徹底了波點音樂(IOS+安卓)最近這款波點音樂很多人都在安利,搖擺就跟個風好了Moo音樂(IOS+安卓)和上面那款波點一樣的地方在於,Moo也是TX新推出的一個音樂平臺~
  • 重回安卓的Walkman 索尼A105音樂播放器好聽嗎?
    因為它支持安卓,能夠上網,支持流媒體,在對抗手機的時候彌補了DMP音樂播放器的一大短板,不再像傳統的音樂播放器那樣感覺脫離網絡時代太久。索尼不是第一次推出安卓系統音樂播放器,在2012年就推出過NWZ-Z1050N,後來又推出了F800系列,不過早期的安卓系統的終端問題很多,系統優化差,加上當時的處理器性能、功耗控制也不太強,導致音樂播放器續航不理想。
  • 山靈公布M6 Pro 安卓無損音樂播放器:驍龍430+4GB內存
    IT之家3月18日消息今天,山靈在微博中公布了M6Pro安卓無損音樂播放器,搭載驍龍430CPU和4GB內存,全新屏內R角,AG磨砂鋼化玻璃,AK4497EQ DAC*2解碼晶片,價格尚未公布。32G ROM;3、解碼晶片(DAC):AK4497EQ DAC*2,單端輸出可切換單/雙DAC模式;4、模擬電路:OPA1662(LPF)+ADA4610-2(OP)+BUF634*2(BUF),全新OP+BUF架構耳放電路,4路LPF搭配4路耳放組成全平衡輸出;5、系統:開放式安卓系統
  • 山靈公布 M6 Pro 安卓無損音樂播放器:驍龍 430+4GB 內存
    IT之家3月18日消息  今天,山靈在微博中公布了M6 Pro 安卓無損音樂播放器,搭載驍龍 430 CPU和4GB內存,全新屏內R角,AG磨砂鋼化玻璃,AK4497EQ DAC *2解碼晶片,價格尚未公布。
  • 安卓和蘋果手機的音質有多爛?體驗後,我默默將有線耳機換成藍牙
    對於目前大多數用戶而言,無論是安卓手機還是蘋果手機,估計都用的真藍牙無線耳機了。在大多數手機都取消3.5mm音頻接口之後,這也是目前在手機上使用耳機的最佳方案。不過說實話,這種方案在音質部分對於無線藍牙耳機的要求更高;但是對於一些擁有高品質有線耳機,同時也願意在手機上聆聽音樂的用戶而言,目前的手機發展趨勢就不是很友善了。
  • 「數玩工場」為索尼音樂生態圈而生,索尼ZX505安卓播放器評測
    索尼不是第一次推出安卓系統音樂播放器,在2012年就推出過NWZ-Z1050N,後來又推出了F800系列,不過早期的安卓系統的問題很多,系統優化差,加上當時的處理器性能、功耗控制也不太強,導致音樂播放器續航不理想。
  • 安卓用什麼藍牙耳機沒有延遲?超低延遲遊戲藍牙耳機推薦
    安卓用什麼藍牙耳機沒有延遲?在專業遊戲藍牙耳機中,Nank南卡 S2 不僅內置高通Qcc3034藍牙5.0晶片,還是業內第一個支持APTX-LL低延遲模式,搭配APTX-HD-高清解碼,AAC-高速傳輸,通過縮短數據緩存時間加快數據傳輸速度,手機從發聲到收聲的全鏈路延遲低至0.04秒,相比普通藍牙5.0晶片延遲率降低42.9%,相比普通藍牙4.2晶片延遲率降低81.8%,進一步提高連接穩定性,絕對達到遊戲藍牙耳機行業的領先水平
  • 藍牙耳機排行榜,口碑最好的藍牙耳機
    相信很多人跟我一樣,這兩年把有線藍牙耳機放棄了,開始使用了無線藍牙耳機,因此這幾年為了找到好用的藍牙耳機,也是換過不少品牌的藍牙耳機,今天給大家盤點目前市面上口碑最好的幾款藍牙耳機品牌。
  • 何必執著於Airpods安卓陣營音質最好的真無線藍牙耳機推薦
    AKG作為一個老牌的音頻廠商,有著太深的音樂底蘊。在對音樂的理解和詮釋上,AKG一直就有著自己特有的風格。三星Galaxy Buds系列送第一代開始就加入了AKG的調音,可謂是這一系列的重大賣點之一。所以今天為大家推薦三款三星的真無線耳機三星Galaxy Buds系列。
  • 性價比最高的藍牙耳機推薦,藍牙耳機十大名牌排行
    西聖I07藍牙耳機機身小巧,單邊耳機重量只有4.0g,佩戴會比較舒適。  小米Air2在交互體驗方面做得不錯,採用觸控操作,輕擊耳機即可實現對音樂、通話、語音助手等功能的操控。搭配小米手機,可以實現彈窗,同時,它還有喚醒語音助手功能,只需要一句「小愛同學」, 甚至都不用掏出手機,即可喚醒語音助手為你播放音樂、講故事、查路線等。徹底解放雙手,讓生活變得簡單許多,這種便捷操作非常實用。  6.FIIL T1真無線運動耳機
  • 中端價格擁有高端規格?海貝新R6旗艦級安卓無損音樂播放器
    搭配自家研發的DTA(Direct Transport Audio)技術,可以繞過Android系統麻煩的SRC限制,安裝MOOV、TIDAL等音樂串流App時就可以無損直出Hi-Res音樂。採用的Android 9.0版本對好多新版音樂App的兼容性更好。新R6也配備了MSEB功能,可以很直觀地調整聲音的冷暖、厚度、人聲前後、樂器瞬態等各種特性。
  • 年度好物推薦——索尼NW-A105HN安卓音樂播放器
    年末將至,如果說你想選一件高品質又能提升幸福感的禮物送給努力一年的自己,不如考慮一下索尼NW-A105HN,高解析度安卓音樂播放器不僅能讓你與音樂相伴,更讓一整年的快樂凝結於此。作為年度好物榜上的成員,索尼安卓高解析度音樂播放器NW-A105HN提供了聆聽高品質音樂的新選擇,不僅有五款顏色可供搭配,還擁有輕巧便捷可以隨身攜帶的特點。
  • 感受音樂世界的流動色彩,漫步者W2真無線藍牙耳機體驗測評
    說一說,你心目中的藍牙耳機應該具備什麼優點?高顏值、性價比、音質好、佩戴舒適、攜帶方便……NO NO NO~小孩子才做選擇,這些我都要——漫步者W2真無線藍牙耳機!如果你的手機是近兩年的安卓旗艦機,一定對type-c充電接口異常深刻,摸黑充電怎麼插怎麼有。遺憾的是,漫步者W2採用的是傳統的Micro-USB充電線,這樣的話出行就需要配備兩根充電線。好在漫步者W2的續航十分給力,充滿電可以續航3小時,充電盒可續充3次、即額外提供9小時續航,共12小時續航,保障每一次出行不斷電。
  • TSC條碼印表機TE244或TE344無線藍牙的安裝過程
    如今新出的條碼印表機型號,也開始支持藍牙、WIFI無線連接,實現移動列印。但TSC條碼印表機出廠標配是沒有藍牙和WIFI,是根據客戶需求選配。一般可以要求供應商安裝測試。如果客戶單獨購買配件該如何安裝?在這裡我要講一下TSC條碼印表機,TE244/TE344機型的藍牙安裝過程。我拍了一些圖片你可以根據圖片所示,進行藍牙的安裝。
  • USB藍牙到底怎麼玩,除了聽歌還能給電腦當遙控器!
    來,且看我用一個藍牙給你電腦加出遙控器來!準備工作首先自然是有一臺 電腦 了,沒有電腦還聊什麼加遙控器。配置不限,能開機就行。其次,需要一部 安卓手機,無論系統和品牌,能裝應用就可以。最後呢,需要一個 藍牙適配器,如果電腦自帶藍牙那就省了,不帶的話,那就下單買一個。這種小附件,我通常都用畢亞茲的產品,便宜好用,最主要我有狗東plus會員,他家產品通常都有plus價。入手好多畢亞茲家的產品,這個塑料殼外包裝還是第一次見到。
  • iCloud大更新,移動端網頁版推出 安卓也能使用
    蘋果很早之前就推出了iCloud的網頁版本iCloud.com ,可以在電腦上實現登錄iCloud帳戶,查看照片,備忘錄,提醒事項,蘋果定位等操作。*iCloud網頁版電腦訪問界面不過之前iCloud.com是無法在iPhone或者移動端正常登錄使用的,當時蘋果並未對iCloud.com開發移動版本。