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简介的更多相关文章

  1. PBOC金融IC卡,卡片与终端交互的13个步骤,简介-第三组

    七:终端风险管理-必选但包含可选步骤异常文件:终端检查应用主账号是否在异常文件列表(卡号黑名单)中.商户强制联机:商户可以将当前交易强制为联机处理.最低限额:控制交易当前交易金额或同一张卡片连续几笔交 ...

  2. iOS音频AAC视频H264编码 推流最佳方案

    iOS音频AAC视频H264编码 推流最佳方案 项目都是个人的调研与实验,可能很多不好或者不对的地方请多包涵. 1    功能概况 *  实现音视频的数据的采集 *  实现音视频数据的编码,视频编码成 ...

  3. HTML5 视频规范简介

    HTML5 视频规范简介  创建于 2013-02-03, 周日 00:56  作者 白建鹏 HTML 一词是“超文本标记语言”(Hyper-Text Markup Language)的缩写,是用于描 ...

  4. 笔记- iphone手机音频AAC视频H264推流(一) iphone手机推流最佳方案

    这几个月一直在做iphone手机音视频的东西,由于个人比较懒,所以一直没整理,现在闲的蛋疼,并且以后项目要搁置了,在这里记录一下我做的iphone手机推流的东西. 项目都是个人的调研与实验,可能很多不 ...

  5. MediaInfo使用简介(新版本支持HEVC)

    MediaInfo 用来分析视频和音频文件的编码和内容信息,是一款是自由软件 (免费使用.免费获得源代码).他除了提供DLL之外,本身也提供GUI工具用于查看视频信息.我使用中发现,新版本的Media ...

  6. 一个RtspServer的设计与实现和RTSP2.0简介

    一个RtspServer的设计与实现和RTSP2.0简介   前段时间着手实现了一个RTSP Server,能够正常实现多路RTSP流的直播播放,因项目需要,只做了对H.264和AAC编码的支持,但是 ...

  7. FFmpeg编解码处理1-转码全流程简介

    本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10584901.html FFmpeg编解码处理系列笔记: [0]. FFmpeg时间戳详 ...

  8. 最大开源代码sourceforge 简介 及视音频方面常用的开源代码

    所有的音视频凯源代码在这里:http://sourceforge.net/directory/audio-video/os:windows/,你可以下载分析,视频不懂请发邮件给我,帮你分析. 0.视频 ...

  9. [多媒体] m3u8简介

    m3u8简介 简介:https://www.jianshu.com/p/426425cad08a RFC:https://tools.ietf.org/html/rfc8216 原理:将视频或音频流分 ...

随机推荐

  1. java集合(3)-Java8新增的Stream操作集合

    Java8新增了Stream,IntStream,LongStream,DoubleStream等流式API,这些API代表多个支持串行和并行聚集操作的元素.上面的4个接口中,Stream是一个通用的 ...

  2. transform和tolower

    transform:<algorithm> tolower:<ctype.h> transform有两种使用方法 第一种(参数): 源目标起始迭代器地址 源目标结束迭代器地址 ...

  3. tomcat默认端口

    关于tomcat默认端口为8080: 网页浏览器的默认端口为80.

  4. 用postman进行web端自动化测试

    概括说一下,web接口自动化测试就是模拟人的操作来进行功能自动化,主要用来跑通业务流程. 主要有两种请求方式:post和get,get请求一般用来查看网页信息:post请求一般用来更改请求参数,查看结 ...

  5. 使用hsdis-amd64.dll打印java的汇编文件

    文件放在D:\DeveSOFTWARE\jdk1.8.0_45\jre\bin目录下 hsdis-amd64.dll 下载路径:https://github.com/atzhangsan/file_l ...

  6. SpringMVC中文乱码踩坑

    问题 使用SpringMVC在返回一个字符串时发生了中文乱码问题.produces属性无效 @RequestMapping(value = "/nihao", produces = ...

  7. 大数据学习(05)——MapReduce/Yarn架构

    Hadoop1.x中的MapReduce MapReduce作为Hadoop最核心的两个组件之一,在1.0版本中就已经存在了.它包含这么几个角色: Client 多数情况下Client的作用就是向服务 ...

  8. Serilog 最佳实践

    Serilog 最佳实践 概述 Serilog是 Microsoft .NET 的结构化日志记录库,并已成为[Checkout.com .NET 的首选日志记录库..它支持各种日志记录目的地(称为接收 ...

  9. Vue Router根据后台数据加载不同的组件(思考->实现->不止于实现)

    实际项目中遇到的需求 同一个链接需要加载不同的页面组件.根据用户所购买服务的不同,有不同的页面展现. 有一些不好的实现方式 直接把这几个组件写在同一个组件下,通过v-if去判断.如果这么做的话,甚至可 ...

  10. python自动化之(自动生成测试报告)

    前言:  用python执行测试脚本, 测试报告是记录我们测试过程的问题, 方便我们对整个测试过程的把控. 这里引用的是别人写好的模板, 我们拿过来用就OK, 能力强者可自行编写模板 测试报告图模板: ...