当前位置: 首页 > news >正文

音视频入门基础:AAC专题(4)——ADTS格式的AAC裸流实例分析

=================================================================

音视频入门基础:AAC专题系列文章:

音视频入门基础:AAC专题(1)——AAC官方文档下载

音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件

音视频入门基础:AAC专题(3)——AAC的ADTS格式简介

音视频入门基础:AAC专题(4)——ADTS格式的AAC裸流实例分析

音视频入门基础:AAC专题(5)——FFmpeg源码中,判断某文件是否为AAC裸流文件的实现

音视频入门基础:AAC专题(6)——FFmpeg源码中解码ADTS格式的AAC的Header的实现

音视频入门基础:AAC专题(7)——FFmpeg源码中计算AAC裸流每个packet的size值的实现

音视频入门基础:AAC专题(8)——FFmpeg源码中计算AAC裸流AVStream的time_base的实现

音视频入门基础:AAC专题(9)——FFmpeg源码中计算AAC裸流每个packet的duration和duration_time的实现

音视频入门基础:AAC专题(10)——FFmpeg源码中计算AAC裸流每个packet的pts、dts、pts_time、dts_time的实现

=================================================================

一、ADTS格式的AAC裸流实例分析

在《音视频入门基础:AAC专题(3)——AAC的ADTS格式简介》中对AAC的ADTS格式进行了简介。下面用一个具体的例子来对ADTS格式的AAC裸流进行分析。

通过《音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件》生成的AAC裸流文件就是ADTS格式的。用notepad++打开该文件,下图红框中的数据为文件头(header),可以看到Header为:0xFF F1 50 80 03 9F FC,也就是二进制的0b11111111 11110001 01010000 10000000 00000011 10011111 11111100(注:这里是因为先知道了Header里面没有CRC校验,所以才确定它为7个字节):

(一)adts_fixed_header

syncword:占12位,每个位都必须被设置为1,也就是0b111111111111,用于标识ADTS帧的起始位置:

ID:占1位,值为0表示音频数据是MPEG-4 AAC:

layer:占2位,总被设置为00:

protection_absent:占1位,值为1表示CRC校验不存在:

profile_ObjectType:占2位。值为1表示规格是AAC LC。该版本是AAC标准的基本部分,其中“LC”代表“Low Complexity”,意味着该编码器使用较少的计算资源来实现高质量的音频压缩:

samplingFrequencyIndex:占4位。值为0b0100,也就是十进制的4表示音频采样频率为44100Hz:

private_bit:占1位,没用:

channel_configuration:占3位。值为0b010,也就是十进制的2表示是双声道:

original_copy:占1位。值为0表示编码的比特流没有版权:

home:占1位。值为0表示比特流是一个拷贝:

(二)adts_variable_header

copyright_identification_bit:占1位。为72位版权标识字段中的一位:

copyright_identification_start:占1位。值为0表示没有版权标识传输:

aac_frame_length:占13位。值为0b11100,也就是十进制的28表示整个ADTS音频帧的长度为28字节:

adts_buffer_fullness:占11位。值为0b11111111111,也就是0x7FF,表示比特流是可变速率比特流:

number_of_raw_data_blocks_in_frame:占2位。值为0表示该ADTS音频帧中只有一个AAC原始数据块:

二、使用工具分析AAC裸流文件

实际开发中我们一般都是使用工具去分析AAC的Header。比如AAC Audio ES Viewer(在Download - Jongbel Media Solutions 可以下载):

用Elecard Stream Analyzer工具也可以分析AAC的Header:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 大健康裂变分销小程序开发
  • linux 之0号进程、1号进程、2号进程
  • 9月18日
  • 前端univer创建、编辑excel
  • Docker 以外置数据库方式部署禅道
  • .config、Kconfig、***_defconfig之间的关系和工作原理
  • Hadoop里面MapReduce的序列化与Java序列化比较
  • Java知识点小结3:内存回收
  • 关于c#中异步async和await的理解
  • PyTorch 图像分割模型教程
  • csdn漏洞测试
  • 大数据处理技术:HBase的安装与基本操作
  • 二级C语言2023-9易错题
  • 数据结构与算法-Trie树添加与搜索
  • IDEA甚至前进后退跳转键
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • css布局,左右固定中间自适应实现
  • ES6系统学习----从Apollo Client看解构赋值
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • HTML中设置input等文本框为不可操作
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • Invalidate和postInvalidate的区别
  • js继承的实现方法
  • Mithril.js 入门介绍
  • PHP 7 修改了什么呢 -- 2
  • python docx文档转html页面
  • Ruby 2.x 源代码分析:扩展 概述
  • storm drpc实例
  • webpack+react项目初体验——记录我的webpack环境配置
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 利用jquery编写加法运算验证码
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前嗅ForeSpider采集配置界面介绍
  • 区块链技术特点之去中心化特性
  • 手机端车牌号码键盘的vue组件
  • 我的面试准备过程--容器(更新中)
  • 新版博客前端前瞻
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • #define
  • #如何使用 Qt 5.6 在 Android 上启用 NFC
  • (2020)Java后端开发----(面试题和笔试题)
  • (4)事件处理——(7)简单事件(Simple events)
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (php伪随机数生成)[GWCTF 2019]枯燥的抽奖
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (三)elasticsearch 源码之启动流程分析
  • (四)JPA - JQPL 实现增删改查
  • (算法设计与分析)第一章算法概述-习题
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库