AAC高级音频编码技术

一、什么是AAC

        AAC的中文名称是高级音频编码技术,它是基于MPEG-2的一种全新的音频编码技术。随着时代的发展,目前AAC的技术升级到MPEG-4表准。AAC广泛的应用在网络传输、高清录制等领域,而AAC技术的出现就是为了取代之前的MP3格式。

二、为什么需要进行AAC进行音频压缩处理

        一帧普通的PCM数据的比特率是很高的,以采样率48000,双声道、采样深度S16的PCM数据传输,假设视频文件是10分钟,那么视频大小就是100多M,这样的大小在网络传输中是不可取的,引入AAC后原来100多M的音频数据被压缩后只有几M

三、AAC的特点和优势

        1.高压缩率:AAC的压缩比为1:20,远比MP3的1:10高,相同时长的音频大小远远小于MP3大小

        2.音质更好:AAC的音频还原度很高,音质相比于其他格式更加的优秀

        3.更高的解码效率:解码播放AAC音频文件时,所占用的资源更少,解码时CPU使用率更低

四、AAC格式详解

        AAC有两种不同的表现形式,一个是ADIF形式,另一种是ADTS形式。

        ADIF形式:可以确认音频数据的开始位置,不能从中间解码,无法随机访问,无法跳播,适合存储在磁盘中

        ADTS形式的AAC文件,可以在任何一帧开始解码,因为ADTS格式的每一帧都有头信息

        4.1ADIF的数据结构

        

        adif_header:adif的头部,一个adif形式的AAC文件只有一个头部

        

        byte_alignment:用于字节对齐

        因为每帧不是固定大小,故只能按照顺序进行解码,也无法跳播或快进快退。除非自己解码遍历整个文件建立每帧位置表。

      4.2ADTS的结构

      

 由上图可知一个ADTS的AAC一帧数据由两个部分组成,ADTS头部和AAC ES,AAC ES是AAC的裸流数据

ADTS Header由两部分组成,一部分是adts_fixed_header,另一部分是adts_variable_header

下面就详细的说一下这两部分。

  1.1adts_fixed_header

        

syncword:固定是0xFFF,代表一个ADTS帧的开始

ID:MPEG标识符,0代表MPEG-4   1代表MPEG-2

layer:默认为0b00(二进制)

protection_absent:表示是否误码校验

profile:表示使用哪个级别的AAC,下面这个表格是profile的索引

Sample Frequence index:代表的时使用采样率下标,通过这个下标找到对应的采样率,如下图

private bit:私有位,编码的时候设置为0,解码的时候忽略这一位

channel configuration:声道数的配置,下面是声道数的配置表格

1单声道
2双声道
3三声道
4四声道
5五声道
6六声道
7八声道

copy:编码的时候设置为0,解码的时候忽略这一位

home:编码的时候设置成0,解码的时候忽略这一位

 1.2adts_varibale_header的表格如下

copyright_identificaion_bit:编码的时候设置为0

copyright_identifiction_start:编码的时候设置为0

aac_frame_length:ADTS帧的长度,包含ADTS头部和AAC es数据的长度,如果包含crc校验的话,ADTS头部的长度是9字节,不包含crc校验的话ADTS头部的长度就是7字节,所以aac_frame_length = (protection_absent == 0 ? 9:7) + audio_data_length

adts_buffer_fulness:固定为0x7FF,这个标识符是指可变码流

number_of_raw_data_blocks_in_frame:表示当前的帧有number_of_raw_data_blocks_in_frame+1个原始帧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/417388.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

酒店网站管理系统前后台完整源码

酒店网站管理系统前后台完整源码,架构是javasshmysql。 系统基于SSH框架,数据库用的mysql。系统分为前台网站部分,和后台管理部分。 注意,不是php代码,是java代码,使用者需要懂java才行。仅供懂java的人学…

如何提升网站的收录率?

要提升网站的收录率,其中一个特别有效的工具就是GPC爬虫池,这个工具通过深度研究谷歌SEO算法,吸引谷歌爬虫。 GPC爬虫池的基本原理是构建一个庞大的站群系统,并创建复杂的内链和外链结构,以吸引并留住谷歌蜘蛛 使用GP…

跟着李沐学ai

01 课程安排【动手学深度学习v2】-跟李沐学AI-【完结】动手学深度学习 PyTorch版-哔哩哔哩视频 (bilibili.com)https://www.bilibili.com/list/1567748478?sid358497&spm_id_from333.999.0.0&desc1&oid714717789&bvidBV1oX4y137bC 目标 介绍深度学习经典和最…

大白话说什么是“MLLM”多模态大语言模型

1. 什么是MLLM多模态大语言模型 1.1 先来思考一个问题 如果上传了一张图片,并向大模型提问。“图片中绿色框框中的人是谁?” 大模型回答:“那是波多野吉衣老师” 请问,大模型是怎么做到的? 我们用常规的思路来想一…

使用 MongoDB 构建 AI:Patronus 如何自动进行大语言模型评估来增强对生成式 AI 的信心

大语言模型可能不可靠,这几乎算不上头条新闻。对于某些用例,这可能会带来不便。而对于其他行业,尤其是受监管行业,后果则要严重得多。于是,业内首个大语言模型自动评估平台 Patronus AI 应运而生。 Patronus AI 由 Met…

SPIRNGBOOT+VUE实现浏览器播放音频流并合成音频

一、语音合成支持流式返回,通过WS可以实时拿到音频流,那么我们如何在VUE项目中实现合成功能呢。语音合成应用非常广泛,如商家广告合成、驾校声音合成、新闻播报、在线听书等等场景都会用到语音合成。 二、VUE下实现合成并使用浏览器播放代码…

山东大学机试试题合集

🍰🍰🍰高分篇已经涵盖了绝大多数的机试考点,由于临近预推免,各校的机试蜂拥而至,我们接下来先更一些各高校机试题合集,算是对前边学习成果的深入学习,也是对我们代码能力的锻炼。加油…

Faceware面部动作捕捉系统,为虚拟角色赋予真实可信的面部动画

在数字娱乐产业日新月异的今天,虚拟角色的真实性和可信度成为了衡量作品质量的重要标准之一。Faceware面部动作捕捉系统是这一领域中的佼佼者,它以先进的技术和卓越的性能,为虚拟角色创造了生动、自然的面部表情,极大地提升了观众…

RK3588 系列之3—rknn使用过程中遇到的bug

RK3588 系列之3—rknn使用过程中遇到的bug 1.librockchip_mpp.so: file format not recognized; treating as linker scrip2.Could not find a package configuration file provided by "OpenCV" with any of the following names参考文献 1.librockchip_…

原点安全荣获“AutoSec Awards 安全之星”优秀汽车数据安全合规方案奖

9月3日,「AutoSec 2024第八届中国汽车网络安全周暨第五届智能汽车数据安全展」在上海盛大开幕。本届大会由谈思实验室和谈思汽车主办、上海市车联网协会联合主办,以汽车“网络数据安全、软件安全、功能安全”为主题,汇聚了国内外的技术专家、…

生信机器学习入门4 - scikit-learn训练逻辑回归(LR)模型和支持向量机(SVM)模型

通过逻辑回归(logistic regression)建立分类模型 1.1 逻辑回归可视化和条件概率 激活函数 (activation function): 一种函数(如 ReLU 或 S 型函数),用于对上一层的所有输入进行求加权和,然后生…

MFC工控项目实例之九选择下拉菜单主界面文本框显示菜单名

承接专栏《MFC工控项目实例之八选择下拉菜单添加打钩图标》 1、在主界面添加一个组合框和一个静态文本框。 2、在SEAL_PRESSUREDlg.cpp文件中添加代码 BOOL CSEAL_PRESSUREDlg::OnInitDialog() {CDialog::OnInitDialog(); ... GetDlgItem(IDC_STATIC_TYPNAME)->SetFont(&a…

如何实现一个定时任务?六种策略可实现

目录标题 1、自定义单线程2、JDK ScheduledExecutorService3、 Spring Task4、Quartz5、Elastic-job6、xxl-job最后:思考更上一层1. 高性能2. 高并发3. 高可用 设计方案 1、自定义单线程 上图中,我们启动一个线程,该线程无限循环执行&#xf…

文件操作详解:fgetc,fputc,fgets,fputs,fscanf,,fprintf,fread,fwrite的使用和例子 C语言

前言 在日常应用中,我们为了持续的使用一些数据,为了让数据可以在程序退出后可以保存并正常使用,引入了文件的概念和操作。本文分享了一些常用的文件操作函数的使用方法和各自的区别。 一、常用文件顺序读写函数 下面例程所使用的VS工程代码…

链表算法题(下)

在链表算法题(上)长中我们已经学习了一系列的链表算法题,那么在本篇中我们将继续来学习链表的算法题,接下来就继续来破解链表的算法题吧! 1.相交链表 160. 相交链表 - 力扣(LeetCode) 通过以上…

mysql开启远程访问

个人建议mysql可以用宝塔自动下载安装。 远程访问, 1.关闭防火墙,确保ip能ping通 2.ping端口确定数据库能ping通 3.本地先连上去命令行修改远程访问权限。 mysql -u root -p use mysql; select user,host from user; select host from user where u…

锐捷网络2025届校园招聘正式启动,【NTA6dni】!

锐捷网络2025届校园招聘正式启动,内推码[NTA6dni]。 原文链接点这 投递链接点这 祝大家面试顺利,offer多多~ 有问题大家可以评论,互相交流~

什么是单片机?为什么要学习单片机?

实现目标 1、熟悉单片机定义、特点、应用场景、发展历史等; 2、理解为什么要学习单片机?怎样学习单片机? 一、单片机是什么? 1、定义 单片机是集成在一块(单)芯片上的微型计算机。平时我们把 MCU&#x…

Java | Leetcode Java题解之第387题字符串中的第一个唯一字符

题目&#xff1a; 题解&#xff1a; class Solution {public int firstUniqChar(String s) {Map<Character, Integer> position new HashMap<Character, Integer>();Queue<Pair> queue new LinkedList<Pair>();int n s.length();for (int i 0; i …

KMP 详解

KMP数组存的是什么 对于一个字符串 b,下标从1开始。 则kmp[i]表示 以i结尾的连续子串 s的前缀的最大值&#xff08;等价于前缀最大结尾处&#xff09; 如何求KMP 假设 i 以前的KMP都被求出来了。 j 表示上一个字符可以成功匹配的长度&#xff08;等价于下标&#xff09; …