AAC简介
AAC共有9种规格,以适应不同的场合的需要:
MPEG-2 AAC LC 低复杂度规格(Low Complexity)--比较简单,没有增益控制,但提高了编码效率,在中等码率的编码效率以及音质方面,都能找到平衡点
MPEG-2 AAC Main 主规格
MPEG-2 AAC SSR 可变采样率规格(Scaleable Sample Rate)
MPEG-4 AAC LC低复杂度规格(Low Complexity)------现在的手机比较常见的MP4文件中的音频部份就包括了该规格音频文件
MPEG-4 AAC Main 主规格 ------包含了除增益控制之外的全部功能,其音质最好
MPEG-4 AAC SSR 可变采样率规格(Scaleable Sample Rate)
MPEG-4 AAC LTP 长时期预测规格(Long Term Predicition)
MPEG-4 AAC LD 低延迟规格(Low Delay)
MPEG-4 AAC HE 高效率规格(High Efficiency)-----这种规格适合用于低码率编码,有Nero ACC 编码器支持
AAC音频格式有ADIF和ADTS:
ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,
不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。
adif格式:

adif_header:

adif_id always:"ADIF"。
ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,
解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。
adts_header:

adts_fixed_header头的部分属性

链接:https://www.jianshu.com/p/30856dccd9cb
int getADTSframe(unsigned char* buffer, int buf_size, unsigned char* data, int* data_size) {
int size = 0;
if (!buffer || !data || !data_size) {
return -1;
}
while (1) {
if (buf_size < 7) {
return -1;
}
//Sync words
if ((buffer[0] == 0xff) && ((buffer[1] & 0xf0) == 0xf0)) {
size |= ((buffer[3] & 0x03) << 11); //high 2 bit
size |= buffer[4] << 3; //middle 8 bit
size |= ((buffer[5] & 0xe0) >> 5); //low 3bit
break;
}
--buf_size;
++buffer;
}
if (buf_size < size) {
return 1;
}
memcpy(data, buffer, size);
*data_size = size;
return 0;
}
int simplest_aac_parser(char *url)
{
int data_size = 0;
int size = 0;
int cnt = 0;
int offset = 0;
//FILE *myout=fopen("output_log.txt","wb+");
FILE *myout = stdout;
unsigned char *aacframe = (unsigned char *)malloc(1024 * 5);
unsigned char *aacbuffer = (unsigned char *)malloc(1024 * 1024);
FILE *ifile = fopen(url, "rb");
if (!ifile) {
printf("Open file error");
return -1;
}
printf("-----+- ADTS Frame Table -+------+\n");
printf(" NUM | Profile | Frequency| Size |\n");
printf("-----+---------+----------+------+\n");
while (!feof(ifile)) {
data_size = fread(aacbuffer + offset, 1, 1024 * 1024 - offset, ifile);
unsigned char* input_data = aacbuffer;
while (1)
{
int ret = getADTSframe(input_data, data_size, aacframe, &size);
if (ret == -1) {
break;
}
else if (ret == 1) {
memcpy(aacbuffer, input_data, data_size);
offset = data_size;
break;
}
char profile_str[10] = { 0 };
char frequence_str[10] = { 0 };
unsigned char profile = aacframe[2] & 0xC0;
profile = profile >> 6;
switch (profile) {
case 0:
sprintf(profile_str, "Main");
break;
case 1:
sprintf(profile_str, "LC");
break;
case 2:
sprintf(profile_str, "SSR");
break;
default:
sprintf(profile_str, "unknown");
break;
}
unsigned char sampling_frequency_index = aacframe[2] & 0x3C;
sampling_frequency_index = sampling_frequency_index >> 2;
switch (sampling_frequency_index) {
case 0:
sprintf(frequence_str, "96000Hz");
break;
case 1:
sprintf(frequence_str, "88200Hz");
break;
case 2:
sprintf(frequence_str, "64000Hz");
break;
case 3:
sprintf(frequence_str, "48000Hz");
break;
case 4:
sprintf(frequence_str, "44100Hz");
break;
case 5:
sprintf(frequence_str, "32000Hz");
break;
case 6:
sprintf(frequence_str, "24000Hz");
break;
case 7:
sprintf(frequence_str, "22050Hz");
break;
case 8:
sprintf(frequence_str, "16000Hz");
break;
case 9:
sprintf(frequence_str, "12000Hz");
break;
case 10:
sprintf(frequence_str, "11025Hz");
break;
case 11:
sprintf(frequence_str, "8000Hz");
break;
default:
sprintf(frequence_str, "unknown");
break;
}
fprintf(myout, "%5d| %8s| %8s| %5d|\n", cnt, profile_str, frequence_str, size);
data_size -= size;
input_data += size;
cnt++;
}
}
fclose(ifile);
free(aacbuffer);
free(aacframe);
return 0;
}
链接:https://blog.csdn.net/leixiaohua1020/article/details/50535042
AAC简介的更多相关文章
- PBOC金融IC卡,卡片与终端交互的13个步骤,简介-第三组
七:终端风险管理-必选但包含可选步骤异常文件:终端检查应用主账号是否在异常文件列表(卡号黑名单)中.商户强制联机:商户可以将当前交易强制为联机处理.最低限额:控制交易当前交易金额或同一张卡片连续几笔交 ...
- iOS音频AAC视频H264编码 推流最佳方案
iOS音频AAC视频H264编码 推流最佳方案 项目都是个人的调研与实验,可能很多不好或者不对的地方请多包涵. 1 功能概况 * 实现音视频的数据的采集 * 实现音视频数据的编码,视频编码成 ...
- HTML5 视频规范简介
HTML5 视频规范简介 创建于 2013-02-03, 周日 00:56 作者 白建鹏 HTML 一词是“超文本标记语言”(Hyper-Text Markup Language)的缩写,是用于描 ...
- 笔记- iphone手机音频AAC视频H264推流(一) iphone手机推流最佳方案
这几个月一直在做iphone手机音视频的东西,由于个人比较懒,所以一直没整理,现在闲的蛋疼,并且以后项目要搁置了,在这里记录一下我做的iphone手机推流的东西. 项目都是个人的调研与实验,可能很多不 ...
- MediaInfo使用简介(新版本支持HEVC)
MediaInfo 用来分析视频和音频文件的编码和内容信息,是一款是自由软件 (免费使用.免费获得源代码).他除了提供DLL之外,本身也提供GUI工具用于查看视频信息.我使用中发现,新版本的Media ...
- 一个RtspServer的设计与实现和RTSP2.0简介
一个RtspServer的设计与实现和RTSP2.0简介 前段时间着手实现了一个RTSP Server,能够正常实现多路RTSP流的直播播放,因项目需要,只做了对H.264和AAC编码的支持,但是 ...
- FFmpeg编解码处理1-转码全流程简介
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10584901.html FFmpeg编解码处理系列笔记: [0]. FFmpeg时间戳详 ...
- 最大开源代码sourceforge 简介 及视音频方面常用的开源代码
所有的音视频凯源代码在这里:http://sourceforge.net/directory/audio-video/os:windows/,你可以下载分析,视频不懂请发邮件给我,帮你分析. 0.视频 ...
- [多媒体] m3u8简介
m3u8简介 简介:https://www.jianshu.com/p/426425cad08a RFC:https://tools.ietf.org/html/rfc8216 原理:将视频或音频流分 ...
随机推荐
- 基于FPGA的图像镜像
图像镜像,一种较为常见的图像处理操作,分为水平镜像.垂直镜像.对角镜像.水平镜像即处理后的图像与原图像关于垂直线对称,垂直镜像为处理后的图像与 原图像关于水平线对称,对角镜像则关于对角线对称. 关于低 ...
- modelsim 独立仿真vivado的IP核及仿真脚本
Modelsim独立仿真vivado的IP 最近一直在做local dimming项目的FPGA硬件实现,算法的其中一步就是直方图统计,即数字图像的某一灰度级的像素数,这个直方图的源码找了半天才搞到, ...
- PyVista:一款Python的三维可视化软件
技术背景 三维可视化是一项在工业领域中非常重要的技术,而Python中最热门的可视化工具matplotlib和plotly,更加倾向于在数据领域的可视化,用于展现数据的结果.类似的还有百度的pyech ...
- CF833B-线段树优化DP
CF833B-线段树优化DP 题意 将一个长为\(n\)的序列分成\(k\)段,每段贡献为其中不同数字的个数,求最大贡献和. 思路 此处感谢@gxy001 聚铑的精彩讲解 先考虑暴力DP,可以想到一个 ...
- 【Uva11400 Lighting System Design】动态规划
分析 先按照电压从小到大排序,做一下前缀和s[i]求i之前的电灯泡的数量. 状态:$ F_i\(表示到\) i$个灯泡的最小开销. 状态转移方程:$ F_i=F_j+(s[i]-s[j])\times ...
- 第十二篇 -- 关于U盘制作启动盘后在本机上显示不出来的解决方案
喜欢玩电脑的朋友应该都重装过系统,最常用的就是用U盘装系统.以前装系统都没问题,不过偶然一次发现了一个问题,就是那个被制作成启动盘的U盘,插在本机上只能显示EFI启动文件部分,而其他空间全都显示不出来 ...
- HTML之单词
段落 paragraph <a href="https://www.runoob.com">超链接 anchor (锚点,引申为连接,link已经被html占用) Hy ...
- jvm源码解读--17 Java的wait()、notify()学习
write and debug by 张艳涛 wait()和notify()的通常用法 A线程取得锁,执行wait(),释放锁; B线程取得锁,完成业务后执行notify(),再释放锁; B线程释放锁 ...
- vue中this.$router.push()路由传值和获取的两种常见方法
1.路由传值 this.$router.push() (1) 路由跳转使用router.push()方法,这个方法会向history栈添加一个新纪录,所以,当用户点击浏览器后退按钮时,会回到之前的 ...
- 'Rem EverythingAutoSetup.VBS 安装Everything的VBS脚本 2019年11月25日写
'Rem EverythingAutoSetup.VBS 安装Everything的VBS脚本 2019年11月25日写 'Rem Everything是voidtools开发的一款本地NTFS文件和 ...