書接上回,設備實現傳統藍牙轉auracast的功能後,就會失去播放高品質音樂的能力。本著破玩意那麼多限制熱愛研究代碼的態度和弘揚不服就干刻苦專研的精神,通過逼良為娼,強人所難動態切換decoder支持列表的方法,實現在不做中轉時也可以使用高品質音樂的功能。
前提:先確認高通當前版本有沒有實現這個功能,目前實現代碼版本的784.1
首先我們要理解實現這個功能的邏輯,簡單了解下這個邏輯,其實和Biu~筆記:高通藍牙ADK(19)--SBC被強制營業的遊戲模式 - 大大通(簡體站) (wpgdadatong.com.cn)這篇博文的邏輯是一樣的,那我就不重複了。
實現方法:
- 我們先要將之前刪了的aptx相關的宏給加上,然後把那煩人的報錯給屏蔽掉
同時也有很多用了下面宏去屏蔽的代碼,也要把這個宏去掉
#if !(defined (INCLUDE_LE_AUDIO_BROADCAST_SOURCE) && defined (ENABLE_SIMPLE_SPEAKER))
2. 在avInterface_InitSepDataBlock函數中設置兩套sep表,在藍牙連接之後,設備會提供這個表的信息給手機,手機根據這個表去選擇a2dp編碼格式。設置兩套表就是為了auracast sender模式和正常模式切換時去更新對應的表,這也是這個方法的中心思想3. 因為這個sep是在連接時交互的,所以更新表之後需要重連一次,後面的邏輯就是怎麼去實現切換模式和重連:
- 這裡觸發切換模式時,分兩種情況,一種是正常模式切到auracast sender模式,直接改變sep;重連a2dp, avrcp;播放音樂;常規進入auracast sender
b. 另一種就是auracast sender模式回到正常模式,這裡順序不一樣是因為要先停止auracast sender功能(這個實現寫在前面的函數了);才能去改變sep;再重連a2dp, avrcp;最後需不需重新播放就看各位需求了
大致處理流程就是這樣,接收器怎麼操作還是按照老樣子操作。當然參考代碼也是有的啦 (=´ω`=),請到附件下載,但是不要照抄,參考代碼的一些參數例如消息延時,這個可以自行修改,最好是做成依賴關係。另外前往手機開發者選項頁面就能看到藍牙當前用了什麼編碼格式。
以上是本期博文的全部內容,如有疑問就在博文下方評論留言,或者聯繫我們,我們會儘量安排上(o´ω`o)و。謝謝大家瀏覽,我們下期再見。
FAQ 1:有官方文檔?
A1:這個詭計沒有文檔,80-42385-1這編號的官方文檔可以參考為使用方法
FAQ 2:一定要先播放音樂嗎?
A2:加了這個方法後可以不用,因為更改模式之後會自動開啟音樂(這也算是沒用的bug,看需求吧→_→)
FAQ 3:方法對LDAC等外來高品質編碼有幫助嗎?
A3:沒問題,將兩個sep的內容區分開就好了
FAQ 4: 聽音樂時,切換會停一下,有辦法改善嗎?
A4: a2dp都斷開了,耶穌來了都救不了,我說的
FAQ 5:加了這個方法之後如何使用?
A5: 和上篇博文一樣
評論