LE AUDIO广播学习笔记之BASE

embedded/2025/2/28 18:27:02/

背景需求

首先看一个有着实际需求情形的列子:比如有个足球吧里,屏幕上正在播放一场国际足球赛,这个吧里有英国人,西班牙人,中国人,德国人等等,大家都在一个屏幕上看球赛,这个时候,球吧可以为每个人提供一副耳机,英国人可以戴上一种耳机收听英语频道的足球解说,西班牙人可以戴上另外一种耳机收听西班牙语的解说,中国人可以戴上耳机听中文解说,德国人可以戴上耳机听德语解说,这里我们想到这是LE AUDIO广播的一个典型的应用场景,那么我们如何来定义这个LE AUDIO的广播源,以便让广播接收端知道这些信息呢?

BASE_3">BASE

为了简化以上案例,我们定义两种语言的解说:西班牙语和英语。我们知道Broadcast source通过广播AUX_SYNC_IND包里的BASE(Broadcast Audio Stream Endpoint)来告诉Broadcast Sinks广播源的音频流的信息。那么我们可以如下图来定义这个LE AUDIO的广播源:
在这里插入图片描述
从上面图片我们看的,BASE的表述类似于一个二叉树的数据结构:一个广播源有一个BIG(Group),这个Group下有2个subgroup,然后每个subgroup下面又分为左右通道不同的两个BIS,那么我们要把以上三个层级的数据记录在蓝牙的AUX_SYNC_IND数据包里,是通过树的前序遍历方式进行保存的,整个数据的排列组织如下面表格:

字节数参数
1Length0x5D==93,表示后面跟着的Advertising Data有93个字节
2Type0x16,表示Service Data
3-4Uuid : Basic Audio Announcement0x1851 , 16bit UUID
5-7Presentation Delay40 ms ,3个字节表示,单位是微秒
8Num_Subgroups0x02: 2 个subgroup
9Num_BIS[0]0x02: subgroup[0]包含2 条BIS
10-14Codec_ID[0]Octet 0: 0x0000000006 = LC3 Coding_Format
15Codec_Specific_Configuration_Length[0]0x0A : 表示Codec_Specific_Configuration for Subgroup[0]的长度有10个字节
16-25Codec_Specific_Configuration[0]采用LTV结构为subgroup[0]定义如下::
LTV 1: Sampling_Frequency: 48000 Hz
LTV 2: Frame_Duration: 10 ms
LTV 3: Octets_Per_Codec_Frame: 100 octets
26Metadata_Length[0]0x09: Subgroup[0] Metadata的长度为9个字节
27-35Metadata[0]采用LTV结构为subgroup[0]定义如下:
LTV 1: Streaming_Audio_Contexts: Media
LTV 2: Language: Spanish,西班牙语
36BIS_index[0[0]]0x01:BIS_index[0][0]流的编号为0x01
37Codec_Specific_Configuration_Length[0[0]]Codec_Specific_Configuration for BIS_index 1的长度为 0x06 个字节
38-43Codec_Specific_Configuration[0[0]]采用LTV结构为BIS_Index 1定义如下:
LTV 1 = Audio_Channel_Allocation: FL(Front Left),西班牙语音频流的左前声道
44BIS_index[0[1]]0x02:BIS_index[0][1]流的编号为0x02
45Codec_Specific_Configuration_Length[0[1]]Codec_Specific_Configuration for BIS_index 2的长度为 0x06 个字节
46-51Codec_Specific_Configuration[0[1]]采用LTV结构为BIS_Index 2定义如下:
LTV 1 = Audio_Channel_Allocation: FR(Front Right),西班牙语音频流的右前声道
52Num_BIS[1]0x02: Subgroup[1]有2条BIS音频流
53-57Codec_ID[1]0x0000000006 = LC3 Coding_Format
58Codec_Specific_Configuration_Length[1]0x0A : 表示Codec_Specific_Configuration for Subgroup[1]的长度有10个字节
59-68Codec_Specific_Configuration[1]采用LTV结构为subgroup[1]定义如下::
LTV 1: Sampling_Frequency: 48000 Hz
LTV 2: Frame_Duration: 10 ms
LTV 3: Octets_Per_Codec_Frame: 100 octets
69Metadata_Length[1]0x09: Subgroup[1] Metadata的长度为9个字节
70-78Metadata[1]采用LTV结构为subgroup[0]定义如下:
LTV 1: Streaming_Audio_Contexts: Media
LTV 2: Language: English,英语
79BIS_index[1[0]]0x03:BIS_index[1][0]流的编号为0x03
80Codec_Specific_Configuration_Length[1[0]]Codec_Specific_Configuration for BIS_index 3的长度为 0x06 个字节
81-86Codec_Specific_Configuration[1[0]]采用LTV结构为BIS_Index 3定义如下:
LTV 1 = Audio_Channel_Allocation: FL(Front Left),英语音频流的左前声道
87BIS_index[1[1]]0x04: BIS_index[1][1]流的编号为0x04
88Codec_Specific_Configuration_Length[1[1]]Codec_Specific_Configuration for BIS_index 4的长度为 0x06 个字节
89-94Codec_Specific_Configuration[1[1]]采用LTV结构为BIS_Index 4定义如下:
LTV 1 = Audio_Channel_Allocation: FR(Front Right),英牙语音频流的右前声道

类似实际空口例子:
在这里插入图片描述


http://www.ppmy.cn/embedded/168852.html

相关文章

蓝桥杯 Java B 组之最短路径算法(Dijkstra、Floyd-Warshall)

Day 2:最短路径算法(Dijkstra、Floyd-Warshall) 📖 一、最短路径算法简介 最短路径问题是图论中的经典问题,主要用于求解 单源最短路径 或 多源最短路径。在实际应用中,最短路径广泛应用于 导航系统、网络…

基于SSM实现的bbs论坛系统功能实现四

一、前言介绍: 1.1 项目摘要 随着互联网技术的不断进步和普及,网络社区已成为人们获取信息、交流意见、分享经验的重要场所。BBS(Bulletin Board System,电子公告板系统)论坛系统作为网络社区的一种重要形式&#xf…

深入浅出Spring Boot框架:从入门到精通

引言 在现代软件开发中,Java 语言及其生态系统一直是构建企业级应用的首选之一。Spring Boot 是 Java 社区中最具影响力的项目之一,它继承了 Spring 框架的优点,并通过简化配置和加速开发流程,使得开发者能够更加专注于业务逻辑的…

每天一个Flutter开发小项目 (4) : 构建收藏地点应用 - 深入Flutter状态管理

引言 欢迎回到 每天一个Flutter开发小项目 系列博客!在前三篇博客中,我们从零开始构建了计数器应用、待办事项列表应用,以及简易天气应用。您不仅掌握了 Flutter 的基础组件和布局,还学习了网络请求、JSON 解析等实用技能,更重要的是,我们一起探讨了高效的 Flutter 学习…

Transformer 代码剖析1 - 数据处理 (pytorch实现)

引言 Transformer 架构自《Attention Is All You Need》论文发表以来,在自然语言处理领域引起了巨大的变革。它摒弃了传统的循环结构,完全基于注意力机制,显著提高了处理序列数据的效率和性能。本文将通过对一个具体的项目代码结构进行详细分…

【Java从入门到起飞】流程控制语句

文章目录 1. 顺序结构2. 分支语句2.1 if-else条件判断结构2.1.1 基本语法2.1.3 if...else嵌套2.1.4 其它说明 2.2 switch-case选择结构2.2.1 基本语法2.2.3 利用case的穿透性2.2.4 if-else语句与switch-case语句比较 3. 循环语句3.1 for循环3.1.1 基本语法 3.2 while循环3.2.1 …

ubuntu配置jmeter

1.前提准备 系统 ubuntu server 22.04 前提条件:服务器更新apt与安装lrzsz:更新apt: sudo apt update安装lrzsz: 命令行下的上传下载文件工具 sudo apt install lrzszsudo apt install zip2.安装jemeter 2.1.下载jdk17 输入命令&#xf…

【Python爬虫(88)】当Python爬虫邂逅智能硬件:解锁数据新玩法

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发…