您現在的位置是:首頁 > 藝術

藍芽電話之HFP協議中的電話音訊

由 Connectivity 發表于 藝術2023-02-06
簡介音訊鏈路SCO或eSCO建立成功後,藍芽系統會以 AUDIO_STATE_CHANGED 的廣播通知註冊過的應用,並且HF側的藍芽晶片會將接收到的語音資料透過PCM介面送入audio系統,那系統的audio模組是如何操作避免多音源輸出呢

藍芽連線hfp什麼意思

藍芽電話之HFP—電話音訊

藍芽技術通訊的內容多種多樣,其中音訊部分包含媒體音訊和電話音訊。

藍芽電話之HFP協議中的電話音訊

藍芽裝置互動

媒體音訊

:播放藍芽音樂的資料,這種音訊對質量要求高,資料傳送有重傳機制,從而以l2cap的資料形式走ACL鏈路。編碼方式有:SBC、AAC、APTX、APTX_HD、LDAC這五種編碼方式,最基礎的編碼方式是SBC,支援藍芽多媒體播放的裝置必須支援該編碼方式,編碼質量最好的是LDAC。編碼方式的選取需要藍芽連線裝置間的互相協商確定。

電話音訊

:藍芽通話過程的語音資料,這種音訊對時效性有高要求,一般透過特殊的SCO或eSCO鏈路傳輸資料。編碼方式有:CVSD、mSBC。最基礎的編碼方式為CVSD,擴音藍芽裝置都需支援該編碼方式,支援寬頻語音的裝置可選mSBC編碼資料。

藍芽電話之HFP協議中的電話音訊

藍芽電話的編碼方式

CVSD

:該編碼方式的資料傳輸使用SCO或eSCO鏈路。鏈路的選取是根據本端Controller是否支援Enhanced Setup Synchronous Connection指令來決定的,如果支援該命令則建立語音音訊鏈路時使用eSCO,否則建立SCO鏈路。

mSBC

:該編碼方式的資料傳輸只能使用eSCO鏈路。

音訊鏈路SCO或eSCO建立成功後,藍芽系統會以 AUDIO_STATE_CHANGED 的廣播通知註冊過的應用,並且HF側的藍芽晶片會將接收到的語音資料透過PCM介面送入audio系統,那系統的audio模組是如何操作避免多音源輸出呢 ?

這其實還是和藍芽電話應用密切相關的,藍芽電話收到音訊鏈路建立成功的廣播後透過AudioManager。requestAudioFocus()申請到系統的音訊焦點後,audio模組會根據申請焦點的stream type判斷其級別,高級別的音源可以打斷低級別的音源(比如:聽音樂時打電話,會先暫停掉音樂)。藍芽電話還需要透過AudioManager。setMode()介面通知audio底層開啟通話通道,從而播放出通話語音。

藍芽電話一般還會有個電話靜音功能,開啟靜音功能後,本端可以聽到對方的語音,但對方聽不到本端的語音,這樣一個功能其實只需要將本端的收音裝置給靜音掉就可實現。AudioManager。setMicrophoneMute()設定true,將Mic靜音。

由於藍芽電話語音的傳輸途徑為:phone Audio -> PCM -> AG基帶 -> HF基帶 -> PCM -> Audio,以及反方向。那麼語音資料都是在底層傳輸的,上層基本涉及不到,從而開發藍芽電話時獲取語音資料就顯得尤為困難,但方法也是有的。

在音訊資料傳輸的各個節點儲存資料檔案(如PCM輸入輸出),使用音訊分析軟體檢視

藍芽抓包工具抓取通話的空口資料(如 Ellisys或Frontline工具)

電話音訊的分析就先到這裡,後續有新的想法我會再更新相關文章的,感興趣的小夥伴歡迎私信留言一起討論。

想了解更多精彩內容,快來關注Connectivity

推薦文章