蓝牙音乐之AVRCP
藍牙音樂之AVRCP
藍牙音樂實實在在地改變了我們聽音樂的方式,尤其是iphone推出真無線耳機后,這一趨勢更加明顯。藍牙音樂中不單單涉及到A2DP,對A2DP還不了解的小伙伴可以查看《藍牙音樂之A2DP》,還有音樂遠端控制功能(播放、暫停、切換歌曲等),而這些功能的實現都依賴于AVRCP協議。
AVRCP:Audio/Video Remote Control Profile,音視頻遠端控制協議,所以該協議不但能控制藍牙音樂,也可以控制視頻流相應的功能。常見的使用到AVRCP控制功能的場景有如下幾種:
- 耳機或車載等藍牙設備控制其他設備上的音樂音源播放(手機)
- 遠端設備控制其他設備上的視頻播放
- 遠端設備控制手機拍照(手機前臺應用為照相機)
AVRCP協議版本變化,版本之間都是向下兼容的關系:
- v1.0:基本的遠程控制命令,如播放、暫停、切歌
- v1.3:新增獲取音樂當前的播放狀態以及播放音樂的歌曲信息(歌曲總時長、當前播放位置、歌曲名、專輯名、歌手)
- v1.4:新增瀏覽功能,支持絕對音量調節
- v1.5:相關協議已通過的更改以糾正各種錯誤
- v1.6:新增兩個特性:
1、項目的數量,用于控制器的接口,請求和接收文件夾中的項數,而無需下載列表
2、封面藝術,支持通過基于OBEX協議上的BIP(Basic Imaging Profile)協議將圖像傳輸到媒體項目
所以如果兩端設備的AVRCP協議都支持1.6及以上,則可實現通過藍牙傳輸圖片的功能。由于藍牙傳輸數據量的限制,該功能也只是適用于音樂專輯封面照等小數據量的傳輸,而不適合大批量圖片的傳輸。
至此,最新的v1.6版本的AVRCP協議結構及依賴關系如下:
AVRCP協議的核心概況如下:
類似于其他藍牙協議,AVRCP協議也將設備兩端劃分為兩種角色:
- CT:controller控制器是通過向目標設備發送命令幀來啟動事務的設備,如耳機、音箱、車載藍牙設備
- TG:target目標是接收控制器發送過來的命令幀并生成相應響應幀的設備,如手機
需要注意的是,通常情況下CT和TG都是成對出現在同一個piconet網中,但是同一個piconet網中可以存在多個CT設備,比如同一個手機(TG)可以同時連接多個耳機(CT)。常見的關系圖如下:
從上面的概況圖可知AVRCP協議的傳輸依賴于AVCTP,所以AVRCP協議的連接、交互實際上是AVCTP傳輸協議的連接、交互流程。
AVCTP的連接建立
用于AVCTP控制的L2CAP鏈路的連接建立可以由CT或TG啟動,此L2CAP鏈路稱為控制通道。如果設備雙方都支持瀏覽功能(AVRCP版本都在v1.4及以上),則還可以在控制通道建立后再建立一條瀏覽通道,瀏覽通道在建立時應配置為使用L2CAP 增強重傳模式。同理通道的釋放也可以由CT或TG啟動,如果存在瀏覽通道則需要在控制通道斷開前釋放。
如果兩端設備同時打開AVCTP通道建立連接,雙方檢測到連接沖突后兩個通道都應關閉,每端設備應該等待隨機時間(100ms <= time <= 1s),然后再嘗試打開AVCTP通道。如果知道哪個設備是主設備,則該設備可以立即重新嘗試連接。
實際使用過程中AVCTP的連接都會在AVDTP(A2DP協議依賴的傳輸協議)連接成功后由CT端設備主動發起連接,當然GT端設備可選擇性的也發起主動連接。
AVRCP中基本AV/C命令
AV/C命令啟動的前提是AVCTP的連接已建立,這樣由用戶觸發或程序內部啟動的AV/C流程才可正常運作,大致流程圖如下:
OBEX的連接和斷開
AVRCP(v1.6版本及以上)使用來自BIP協議通用成像圖像特性中定義的功能來提供封面藝術圖片,而BIP又依賴于OBEX。所以封面藝術OBEX連接時使用的目標標頭為封面藝術專屬的 UUID = 7163DD54-4A7E-11E2-B47C-0050C2490048。
鏈路建立成功后,AVRCP的CT端設備具有BIP成像發起者的作用,而對應的AVRCP的GT端設備具有BIP成像應答器的作用。
AVRCP命令的類型:
(1):在AV/C規范中定義的Pass Through命令、UNIT和SUBUNIT INFO命令,常用的播放、暫停、上下首切歌等控制命令都是Pass Through命令
(2):AVRCP特有的AV/C命令
AVRCP協議中特有的常見命令如下圖所示:
更多AVRCP指令就留待大家在實際使用過程中探索了,本期的AVRCP協議分享就到這兒感興趣的小伙伴歡迎私信留言一起討論,共同學習,一起進步!
更多互聯互通技術,歡迎關注微信公眾號:Connectivity
參考文件:
《AVRCP_v1.6.2.pdf》
《AVCTP_SPEC_V14.pdf》
總結
以上是生活随笔為你收集整理的蓝牙音乐之AVRCP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 页面级缓存@ OutputCache
- 下一篇: Sql Server临时表中插入标示列