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 原理:将视频或音频流分 ...
随机推荐
- Python之抖音快手代码舞--字符舞
先上效果,视频敬上: 字符舞: 代码舞 源代码: video_2_code_video.py 1 import argparse 2 import os 3 import cv2 4 import s ...
- 日志采集工具Flume的安装与使用方法
安装Flume,参考厦门大学林子雨教程:http://dblab.xmu.edu.cn/blog/1102/ 并完成案例1 1.案例1:Avro source Avro可以发送一个给定的文件给Flum ...
- 【学习笔记】pytorch中squeeze()和unsqueeze()函数介绍
squeeze用来减少维度, unsqueeze用来增加维度 具体可见下方博客. pytorch中squeeze和unsqueeze
- 禁用ipv6的两种方法
1 通过系统配置文件/etc/sysctl.conf 在sysctl.conf文件中添加行 # 禁用整个系统所有接口的IPv6 net.ipv6.conf.all.disable_ipv6 = 1 # ...
- Vue 可拖拽组件 Vue Smooth DnD 详解和应用演示
本文发布自 https://www.cnblogs.com/wenruo/p/15061907.html 转载请注明出处. 简介和 Demo 展示 最近需要有个拖拽列表的需求,发现一个简单好用的 Vu ...
- 开源协同办公平台部署教程:O2OA PAAS平台部署
一.镜像制作1.将安装介质o2server-5.0.3-linux.zip上传至镜像制作服务器上.(上传目录为/paas/xxhpaas/moka/o2oa)2.使用unzip命令解压安装包,参考命令 ...
- [POI2008]PER
很有思维的一道题 这个题的题面非常简单,出题人很友好,没有搞什么奇怪的背景,(卡农(P3214)的作者看看人家),所以理解题面就是: 一句话题意: 给定一个长度为 \(n\) 的数列,求这个数列是在其 ...
- VB 6.0不能加载MSCOMCTL.OCX的解决方法
问题场景:打开 VB 6项目时报错,不能加载 'C:\WINDOWS\system32\MSCOMCTL.OCX'--继续加载工程吗? 解决方法: 1.新建一个VB工程,然后按CTRL + T,选中 ...
- 1.1 MATLAB系统环境
专题一 MATLAB基础知识 1.1 MATLAB系统环境 1. 续行符(三个点) 2. 当前文件夹 先建立当前文件夹,再cd 3.工作区窗口 4.搜索路径 01当前文件夹下的程序文件 变 ...
- CVE-2021-3156 复现
测试环境 OS: Ubuntu 18.04.5 LTS GCC: gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) Make: GNU Make 4.1 ...