GFPS擴展技術原理(七)-音頻切換消息流

音頻切換消息流

Seeker和Provider通過消息流來同步音頻切換能力,觸發連接做切換,獲取或設置音頻切換偏好,通知連接狀態等等。為此專門定義了音頻切換消息流Message Group 為0x07,Message codes如下:
在這里插入圖片描述

MAC of Audio switch Messages

所有的從seeker發送到Provider的消息都需要加上MAC,這樣Provider應答這些消息的時候也需要帶上MAC:

  • Provider應答ACK的消息流格式如下:
    在這里插入圖片描述
  • Provider應答NAK的消息流格式如下:
    在這里插入圖片描述

Get capability of Audio switch

這個消息可以由audio switch provider或者seeker發送,用于查詢對方是否支持audio switch,消息流格式如下:
在這里插入圖片描述

Notify capability of Audio switch

在收到get capability of Audio switch消息之后,Seeker或者Provider需要回復這個消息,格式如下:
在這里插入圖片描述
這里我們主要關注一下Audio switch capability flags,只有Provider發送的時候,這兩個字節才有效。這兩個字節是標注音頻切換能力的:

  1. Bit 0 (octet 6, MSB): Audio switch state

    1, if Audio switch state is on
    0, otherwise
    
  2. Bit 1: multipoint configurability

    1, if the device supports multipoint and it can be switched between on and off
    0, otherwise (does not support multipoint or multipoint is always on)
    
  3. Bit 2: multipoint current state

    1, if multipoint is on
    0, otherwise
    
  4. Bit 3: on-head detection

    1, if this device supports on-head detection (even if on-head detection is turned off now)
    0, otherwise
    
  5. Bit 4: on-head detection current state

    1, if on-head detection is turned on
    0, otherwise (does not support on-head detection or on-head detection is disabled)
    

Set multipoint state

這個是audio switch seeker用來打開或關閉Provider multipoint功能的消息,消息流格式如下:
在這里插入圖片描述

Set switching preference

這個是audio switch seeker用來設置Provider multipoint音頻切換偏好的,消息流格式如下:
在這里插入圖片描述
這里我們主要注意multipoint switching preference flag:

  • Bit 0 (MSB): A2DP vs A2DP (default 0)
  • Bit 1: HFP vs HFP (default 0)
  • Bit 2: A2DP vs HFP (default 0)
  • Bit 3: HFP vs A2DP (default 1)
  • Bit 4 - 7: reserved

上面表示的形式是“新profile”VS"舊profiler",如果那個bit置上0,代表不能切換,如果置上1,表示可以切換。舉個例子Bit 3置上1,表示如果有HFP連接進來,那么需要從原來的A2DP切換到HFP。

Get switching preference

Seeker可以發送Get switching preference消息給Provider,主動獲取音頻切換偏好,消息流格式如下:
在這里插入圖片描述

Notify switching preference

在這里插入圖片描述

Switch active audio source (to connected device)

Audio switch Seekers 可以請求multipoint Provider在連接的設備中切換活躍音頻源,消息流格式如下:
在這里插入圖片描述
這里我們主要關注Switching active audio source event flags這個字節:

  • Bit 0 (MSB): 1 切換到當前設備, 0 切換到另外設備
  • Bit 1: 1 在切換后恢復播放, 0 反著來。注意: 恢復播放意味著Provider需要通過AVRCP發送一個PLAY notification 給Seeker,如果seeker之前的狀態就是停播,那么Provider就要忽略這個標志。
  • Bit 2: 1 在切換出去的設備拒絕SCO 連接。 0 反著來。
  • Bit 3: 1 在切換出去的設備斷開藍牙連接。0 反著來.
  • Bit 4 - 7: 這幾個bit保留未用.

如果Audio switch seeker已經是當前活躍音頻設備了,然后又發送了switch active audio device 消息給Provider,那么Provider需要回復NAK,理由是0x04-Redundant device action。
對于LE Audio Provider,如果是被切換出去的設備,那么需要斷開所有的協調集成員的連接。

Switch back (to disconnected device)

如果用戶想切回原來的設備,那么可以發送如下格式消息:
在這里插入圖片描述
需要注意的是switch back event:

  • 0x01:switch back,就是簡單的切回去連接上。
  • 0x02:切回去然后恢復播放,這里有個前提就是斷開的設備,在被斷開前的狀態也是播放狀態才行,否則Provider會忽略這個標志。

Notify multipoint-switch event

audio switch Provider通知Seeker發生的切換事件,消息格式如下:
在這里插入圖片描述

Get connection status

Seeker從Provider獲取當前連接狀態,消息格式如下:
在這里插入圖片描述

Notify connection status

連接狀態的改變,除了需要修改BLE廣播,還有就是Provider需要通知當前使用共同accout key的連接的audio switch seeker。如果provider連接一個audio switch seeker和一個non-audio switch seeker,并且當前活躍設備是non-audio switch seeker,那么provider也要通知audio switch seeker。Provider發送給Seeker的連接狀態的消息,格式如下:
在這里插入圖片描述
這里注意一下Encrypted connection status,跟之前音頻切換廣播里的connection status一樣:

encrypted_connection_status = connection_status_raw_data ^ AES(Key, IV)

其中:

  • clike Key = HKDF(account_key, NULL, UTF8("SASS-RRD-KEY"),16)
  • IV is concat(Session_nonce, Message_nonce)
  • connection_status_raw_data = concat(connection_state, custom_data, connected_devices)

Notify Audio switch initiated connection

這個是Seeker告訴Provider,此連接是audio switch發起的連接,消息格式如下:
在這里插入圖片描述

Indicate in use account key

如果同一個Seeker上多個account key 賬戶連接著同一個Provider,那么Seeker使用如下格式消息告訴Provider當前使用哪個account key:
在這里插入圖片描述
Provider收到消息后,通過校驗MAC能夠得知當前使用哪個account key。

Send custom data

活躍Audio switch Seeker能夠封裝音頻流信息在custom data里發送給Provider,消息格式如下:
在這里插入圖片描述
Provider收到custom data之后,會更新廣播數據包含custom data。如果是multipoint Provider,它也需要使用相同的account key通知連接狀態的改變給另外連接的seeker。

Set drop connection target

在 multipoint headsets, 如果想要斷開的連接不是最近常用的連接,那么需要audio switch Seekers 告訴Provider需要斷開哪個設備,數據格式如下:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63762.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63762.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63762.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LiteFlow決策系統的策略模式,順序、最壞、投票、權重

個人博客:無奈何楊(wnhyang) 個人語雀:wnhyang 共享語雀:在線知識共享 Github:wnhyang - Overview 想必大家都有聽過或做過職業和性格測試吧,尤其是現在的畢業生,在投了簡歷之后經…

【計算機視覺基礎CV-圖像分類】02-入門詳解圖像分類、經典數據集、比賽與冠軍圖像模型演進史

前言 圖像分類(Image Classification)是計算機視覺(Computer Vision)中一項基礎且核心的任務。簡單來說,就是讓計算機從給定的類別集合中,為一張輸入圖片分配一個正確的類別標簽。這個過程聽起來直觀&…

三子棋游戲(基礎版)

我們用 C 語言代碼實現了一個簡單的控制臺版三子棋游戲&#xff0c;代碼分為三個部分&#xff0c;分別是頭文件game.h中定義的函數聲明以及兩個源文件game.c和test.c、game.c文件。 1.頭文件&#xff08;game.h&#xff09;部分 首先包含了<stdio.h>&#xff08;用于標…

使用Chat-LangChain模塊創建一個與用戶交流的機器人

當然&#xff01;要使用Chat-LangChain模塊創建一個與用戶交流的機器人&#xff0c;你需要安裝并配置一些Python庫。以下是一個基本的步驟指南和示例代碼&#xff0c;幫助你快速上手。 安裝依賴庫 首先&#xff0c;你需要安裝langchain庫&#xff0c;它是一個高級框架&#x…

嵌入式驅動開發詳解20(IIO驅動架構)

文章目錄 前言IIO子系統簡介主要結構體主要API函數 IIO子系統實現SPI框架IIO框架IIO通道詳解通道結構體分析通道命名分析icm20608設備通道實現 讀取函數寫入函數 測試測試效果命令行讀取應用程序讀取 后續參考文獻 前言 IIO 全稱是 Industrial I/O&#xff0c;翻譯過來就是工業…

Linux 網絡維護相關命令簡介

目錄 零. 概要一. ping二. ip命令2.1 ip address2.2 ip route2.3 ip neighbour 三. traceroute四. DNS查詢4.1 nslookup4.2 dig 五. ss 查看網絡連接狀態 零. 概要 ?在Linux系統中有2套用于網絡管理的工具集 net-tools 早期網絡管理的主要工具集&#xff0c;缺乏對 IPv6、網…

Jenkins持續集成部署——jenkins安裝

前言 Jenkins 是一個開源的自動化服務器&#xff0c;主要用于持續集成&#xff08;CI&#xff09;和持續交付&#xff08;CD&#xff09;。它為軟件開發團隊提供了一個易于使用的平臺來自動化構建、測試和部署應用程序的過程。 Jenkins 主要功能 1. 持續集成 (CI) 自動構建…

PYG - Cora數據集加載 (自動加載+手動實現)

本文從Cora的例子來展示PYG如何加載圖數據集。 Cora 是一個小型的有標注的圖數據集&#xff0c;包含以下內容&#xff1a; data.x&#xff1a;2708 個節點&#xff08;即 2708 篇論文&#xff09;&#xff0c;每個節點有 1433 個特征&#xff0c;形狀為 (2708, 1433)。data.ed…

《 火星人 》

題目描述 人類終于登上了火星的土地并且見到了神秘的火星人。人類和火星人都無法理解對方的語言&#xff0c;但是我們的科學家發明了一種用數字交流的方法。這種交流方法是這樣的&#xff0c;首先&#xff0c;火星人把一個非常大的數字告訴人類科學家&#xff0c;科學家破解這…

機器學習基礎算法 (二)-邏輯回歸

python 環境的配置參考 從零開始&#xff1a;Python 環境搭建與工具配置 邏輯回歸是一種用于解決二分類問題的機器學習算法&#xff0c;它可以預測輸入數據屬于某個類別的概率。本文將詳細介紹邏輯回歸的原理、Python 實現、模型評估和調優&#xff0c;并結合垃圾郵件分類案例進…

BiTCN-BiGRU基于雙向時間卷積網絡結合雙向門控循環單元的數據多特征分類預測(多輸入單輸出)

Matlab實現BiTCN-BiGRU基于雙向時間卷積網絡結合雙向門控循環單元的數據多特征分類預測&#xff08;多輸入單輸出&#xff09; 目錄 Matlab實現BiTCN-BiGRU基于雙向時間卷積網絡結合雙向門控循環單元的數據多特征分類預測&#xff08;多輸入單輸出&#xff09;分類效果基本描述…

云備份項目--工具類編寫

4. 文件工具類的設計 4.1 整體的類 該類實現對文件進行操作 FileUtil.hpp如下 /* 該類實現對文件進行操作 */ #pragma once #include <iostream> #include <string> #include <fstream> #include <vector> #include <sys/types.h> #include …

51c大模型~合集94

我自己的原文哦~ https://blog.51cto.com/whaosoft/12897659 #D(R,O) Grasp 重塑跨智能體靈巧手抓取&#xff0c;NUS邵林團隊提出全新交互式表征&#xff0c;斬獲CoRL Workshop最佳機器人論文獎 本文的作者均來自新加坡國立大學 LinS Lab。本文的共同第一作者為上海交通大…

【大學英語】英語范文十八篇,書信,議論文,材料分析

關注作者了解更多 我的其他CSDN專欄 過程控制系統 工程測試技術 虛擬儀器技術 可編程控制器 工業現場總線 數字圖像處理 智能控制 傳感器技術 嵌入式系統 復變函數與積分變換 單片機原理 線性代數 大學物理 熱工與工程流體力學 數字信號處理 光電融合集成電路…

一起學Git【第一節:Git的安裝】

Git是什么&#xff1f; Git是什么&#xff1f;相信大家點擊進來已經有了初步的認識&#xff0c;這里就簡單的進行介紹。 Git是一個開源的分布式版本控制系統&#xff0c;由Linus Torvalds創建&#xff0c;用于有效、高速地處理從小到大的項目版本管理。Git是目前世界上最流行…

消息隊列 Kafka 架構組件及其特性

Kafka 人們通常有時會將 Kafka 中的 Topic 比作隊列&#xff1b; 在 Kafka 中&#xff0c;數據是以主題&#xff08;Topic&#xff09;的形式組織的&#xff0c;每個 Topic 可以被分為多個分區&#xff08;Partition&#xff09;。每個 Partition 是一個有序的、不可變的消息…

《Mycat核心技術》第06章:Mycat問題處理總結

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章匯總&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球項目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

【day11】面向對象編程進階(繼承)

概述 本文深入探討面向對象編程的核心概念&#xff0c;包括繼承、方法重寫、this和super關鍵字的使用&#xff0c;以及抽象類和方法的定義與實現。通過本文的學習&#xff0c;你將能夠&#xff1a; 理解繼承的優勢。掌握繼承的使用方法。了解繼承后成員變量和成員方法的訪問特…

隨手記:小程序兼容后臺的wangEditor富文本配置鏈接

場景&#xff1a; 在后臺配置wangEditor富文本&#xff0c;可以文字配置鏈接&#xff0c;圖片配置鏈接&#xff0c;產生的json格式為&#xff1a; 例子&#xff1a; <h1><a href"https://uniapp.dcloud.net.cn/" target"_blank"><span sty…

6.8 Newman自動化運行Postman測試集

歡迎大家訂閱【軟件測試】 專欄&#xff0c;開啟你的軟件測試學習之旅&#xff01; 文章目錄 1 安裝Node.js2 安裝Newman3 使用Newman運行Postman測試集3.1 導出Postman集合3.2 使用Newman運行集合3.3 Newman常用參數3.4 Newman報告格式 4 使用定時任務自動化執行腳本4.1 編寫B…