【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(二)

简介: 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )(二)

2. AAC 音频特殊配置


打开第 2 22 个音频数据标签 : 内容如下 , 这是完整的音频标签数据 ;


0x000001bf  :   08 00 00 07 00 00 00 00 
0x000001c7  :   00 00 00 AF 00 12 10 56 
0x000001cf  :   E5 00 00 00 00 12

image.png





3. AAC 音频数据标签


AAC 音频数据标签 : 该标签中封装实际的音频采样 , AAC 格式的 ;


0x00017494  :   08 00 00 13 00 00 85 00 
0x0001749c  :   00 00 00 AF 01 21 1A 93 
0x000174a4  :   40 7D 6B 94 64 A0 9A 03 
0x000174ac  :   EB 5C A3 25 05 C0 00 00 
0x000174b4  :   00 1E


image.png






三、 FLV 音频数据标签头


音频标签数据标签头解析 : 前 11 个字节时标签头信息 ; 这 11 1111 个字节仅做参考 , 在 RTMP 中是不封装这个标签头的 ;


0x000001bf  :   08 00 00 07 00 00 00 00 
0x000001c7  :   00 00 00



① 标签类型 ( tag type ) : 1 11 字节 , 索引区间 [ 0 ] [0][0] , 08 代表音频 , 09 代表视频 , 12 代表脚本信息 , 这里是 08 , 代表音频数据 ;


② 标签数据大小 ( data size ) : 3 33 字节 , 索引区间 [ 1 , 3 ] [1,3][1,3] , 除了包头之外的数据大小 , 包头一般是 11 1111 字节, 整个标签大小是该 标签数据大小 ( data size ) + 11 , 本标签的数据大小是 7 77 字节, 总的数据大小是 18 1818 字节, 十六进制对应 0x12 1212


③ 时间戳 ( time stamp ) : 3 33 字节 , 索引区间 [ 4 , 6 ] [4,6][4,6] , 表示从开始播放到当前时刻的播放时间 , 单位毫秒 , 也就是当前标签的时间与第一个标签时间的差值 ; 一般是 00 00 00 ;


④ 时间戳扩展位 ( time stamp ext ) : 1 11 字节 , 索引区间 [ 7 ] [7][7] , 如果时间戳较大 , 3 33 位装不下 , 扩展一位 ; 一般是 00 ;


⑤ 流编号 ( stream id ) : 3 33 字节 , 索引区间 [ 8 , 10 ] [8,10][8,10] , 一般都是 00 00 00 ;



组装 RTMP 包的时候 , 是不需要封装标签头的 , 直接将 AAC 裸数据 , 也就是这 7 77 个字节封装到 RTMP 包中 ;






四、 音频解码配置信息




1. AAC 音频数据


AAC 音频数据 : 分为两类 , 解码配置数据, 音频采样数据 ;



① AAC 格式音频解码配置信息 : 下面的 7 77 个字节时音频解码配置信息 ;



0x000001bf  :   
0x000001c7  :            AF 00 12 10 56 
0x000001cf  :   E5


② AAC 音频数据标签数据采样信息 :


0x0001749c  :            AF 01 21 1A 93 
0x000174a4  :   40 7D 6B 94 64 A0 9A 03 
0x000174ac  :   EB 5C A3 25 05 C0




2. 第 1 11 字节 AF 数据解析


第 1 11 字节 AF 数据解析 : 前 4 44 位表示音频格式 , 之后的 2 22 位表示采样率 , 之后的 1 11 位表示采样长度 , 最后一位表示音频类型 ;



① 0xAF 使用二进制表示为 0b‭1010 1111‬ ;


② 音频格式 : 4 44 位 [ 7 : 4 ] : 0b1010 = 10 , 值为 10 , 表示 AAC 格式 ;


③ 采样率 : 2 22 位 [ 3 : 2 ] : 0b11 = 3 , 代表 44000 Hz 采样率 , AAC 格式一般都是 44000 采样率


值 采样率

0 5500Hz

1 11000Hz

2 22000Hz

3 44000Hz

④ 采样位数 : 1 11 位 [ 1 ] : 0b1 = 1 , 代表采样长度 16 位 ;


值 采样位数

0 8 位 / 1 字节

1 16 位 / 2字节

⑤ 音频通道 : 1 11 位 [ 0 ] : 0b1 = 1 , 代表立体声 ;


值 音频通道

0 单声道

1 立体声


该位一般也就是声道不同 , 其它参数基本都是默认的值 , 立体声 AF , 单声道 AE ;




3. 音频数据类型


音频数据类型 :



① 音频解码配置信息 : 前两位是 AF 00 , 指导 AAC 数据如何解码 ;


② 音频采样信息 : 前两位是 AF 01 , 实际的 AAC 音频采样数据 ;


目录
相关文章
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
1381 4
|
7月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
496 11
|
9月前
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
2311 2
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
813 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
11月前
|
存储 机器学习/深度学习 缓存
🚀 力扣热题 394:字符串解码(详细解析)(Go语言版)
文章提供了两种解法:栈结构和递归解法。栈解法通过维护数字栈与字符串栈,依次处理 `[` 和 `]`,构造解码结果;递归解法则利用函数调用逐层解析嵌套结构。两者时间复杂度均为 $O(n)$,空间复杂度也为 $O(n)$。栈解法直观易懂,适合初学者;递归解法优雅简洁,适合处理深度嵌套规则。掌握这两种方法,可灵活应对类似问题,提升解题能力。
375 11
|
数据可视化 算法 数据挖掘
用傅里叶变换解码时间序列:从频域视角解析季节性模式
本文介绍了如何使用傅里叶变换和周期图分析来识别时间序列中的季节性模式,特别是在能源消耗数据中。通过Python实现傅里叶变换和周期图,可以有效提取并量化时间序列中的主要和次要频率成分,克服传统可视化分析的局限性。这对于准确捕捉时间序列中的季节性变化具有重要意义。文章以AEP能源消耗数据为例,展示了如何应用这些方法识别日、周、半年等周期模式。
543 3
用傅里叶变换解码时间序列:从频域视角解析季节性模式
|
Serverless 对象存储 人工智能
智能文件解析:体验阿里云多模态信息提取解决方案
在当今数据驱动的时代,信息的获取和处理效率直接影响着企业决策的速度和质量。然而,面对日益多样化的文件格式(文本、图像、音频、视频),传统的处理方法显然已经无法满足需求。
486 4
智能文件解析:体验阿里云多模态信息提取解决方案
|
文字识别 开发者 数据处理
多模态数据信息提取解决方案评测报告!
阿里云推出的《多模态数据信息提取》解决方案,利用AI技术从文本、图像、音频和视频中提取关键信息,支持多种应用场景,大幅提升数据处理效率。评测涵盖部署体验、文档清晰度、模板简化、示例验证及需求适配性等方面。方案表现出色,部署简单直观,功能强大,适合多种业务场景。建议增加交互提示、多语言支持及优化OCR和音频转写功能...
440 3
多模态数据信息提取解决方案评测报告!
|
11月前
|
机器学习/深度学习 人工智能 文字识别
从“泛读”到“精读”:合合信息文档解析如何让大模型更懂复杂文档?
随着deepseek等大模型逐渐步入视野,理论上文档解析工作应能大幅简化。 然而,实际情况却不尽如人意。当前的多模态大模型虽然具备强大的视觉与语言交互能力,但在解析非结构化文档时,仍面临复杂版式、多元素混排以及严密逻辑推理等挑战。
417 0
|
数据采集 XML API
深入解析BeautifulSoup:从sohu.com视频页面提取关键信息的实战技巧
深入解析BeautifulSoup:从sohu.com视频页面提取关键信息的实战技巧

热门文章

最新文章

推荐镜像

更多