当前位置: 首页 > 编程日记 > 正文

AAC_LC用LATM封装header信息解析 Audio Specific Config格式分析

通常来说AAC的头信息在编解码过程中是可以获取到的,但今天需要根据音频参数生成相应的AAC头。项目中使用的是AAC_LC,今天先对它的结构进行分析。

项目中使用ffmpeg进行音频编码,音频编码库为FAAC,好吧,直接看代码吧。

ffmpeg调用Faac_encode_init()初始化编码器;在Faac_encode_init()调用faacEncGetDecoderSpecificInfo()获取AAC_LC头信息内容及长度。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int FAACAPI faacEncGetDecoderSpecificInfo(faacEncHandle hEncoder,unsigned char** ppBuffer,unsigned long* pSizeOfDecoderSpecificInfo)
{
    BitStream* pBitStream = NULL; <span style="font-family:Times New Roman;"></span> if((hEncoder == NULL) || (ppBuffer == NULL) || (pSizeOfDecoderSpecificInfo == NULL)) {
        return -1;
    }
    if(hEncoder->config.mpegVersion == MPEG2){
        return -2; /* not supported */
    }
    *pSizeOfDecoderSpecificInfo = 2;
    *ppBuffer = malloc(2);
    if(*ppBuffer != NULL){
        memset(*ppBuffer,0,*pSizeOfDecoderSpecificInfo);
        pBitStream = OpenBitStream(*pSizeOfDecoderSpecificInfo, *ppBuffer);
        PutBit(pBitStream, hEncoder->config.aacObjectType, 5);
        PutBit(pBitStream, hEncoder->sampleRateIdx, 4);
        PutBit(pBitStream, hEncoder->numChannels, 4);
        CloseBitStream(pBitStream);
        return 0;
    } else {
        return -3;
    }
}


从代码中可以看出,头数据长度固定为2;

数据内容由高位到低位依次为:aacObjectType(5bits),sampleRateIdx(4bits),numChannels(4bits)

例如:音频编码参数为:

aacObjectType:AAC_LC,对应值为2,用5bit二进制表示为00010;

sampleRate:44100KHz, 对应的IDX值为4, 用4bit二进制表示为0100;

numChannels:2,对应的值为2,用4bit二进制表示为0010;

将它们由高位到低位串起来:0001,0010,0001,0000,

则,对应的十六进制值为:0x1220

引一些参考资料:http://wiki.multimedia.cx/index.php?title=MPEG-4_Audio

Audio Specific Config

The Audio Specific Config is the global header for MPEG-4 Audio:

5 bits: object type
if (object type == 31)6 bits + 32: object type
4 bits: frequency index
if (frequency index == 15)24 bits: frequency
4 bits: channel configuration
var bits: AOT Specific Config

Audio Object Types

MPEG-4 Audio Object Types:

  • 0: Null
  • 1: AAC Main
  • 2: AAC LC (Low Complexity)
  • 3: AAC SSR (Scalable Sample Rate)
  • 4: AAC LTP (Long Term Prediction)
  • 5: SBR (Spectral Band Replication)
  • 6: AAC Scalable
  • 7: TwinVQ
  • 8: CELP (Code Excited Linear Prediction)
  • 9: HXVC (Harmonic Vector eXcitation Coding)
  • 10: Reserved
  • 11: Reserved
  • 12: TTSI (Text-To-Speech Interface)
  • 13: Main Synthesis
  • 14: Wavetable Synthesis
  • 15: General MIDI
  • 16: Algorithmic Synthesis and Audio Effects
  • 17: ER (Error Resilient) AAC LC
  • 18: Reserved
  • 19: ER AAC LTP
  • 20: ER AAC Scalable
  • 21: ER TwinVQ
  • 22: ER BSAC (Bit-Sliced Arithmetic Coding)
  • 23: ER AAC LD (Low Delay)
  • 24: ER CELP
  • 25: ER HVXC
  • 26: ER HILN (Harmonic and Individual Lines plus Noise)
  • 27: ER Parametric
  • 28: SSC (SinuSoidal Coding)
  • 29: PS (Parametric Stereo)
  • 30: MPEG Surround
  • 31: (Escape value)
  • 32: Layer-1
  • 33: Layer-2
  • 34: Layer-3
  • 35: DST (Direct Stream Transfer)
  • 36: ALS (Audio Lossless)
  • 37: SLS (Scalable LosslesS)
  • 38: SLS non-core
  • 39: ER AAC ELD (Enhanced Low Delay)
  • 40: SMR (Symbolic Music Representation) Simple
  • 41: SMR Main
  • 42: USAC (Unified Speech and Audio Coding) (no SBR)
  • 43: SAOC (Spatial Audio Object Coding)
  • 44: LD MPEG Surround
  • 45: USAC

Sampling Frequencies

There are 13 supported frequencies:

  • 0: 96000 Hz
  • 1: 88200 Hz
  • 2: 64000 Hz
  • 3: 48000 Hz
  • 4: 44100 Hz
  • 5: 32000 Hz
  • 6: 24000 Hz
  • 7: 22050 Hz
  • 8: 16000 Hz
  • 9: 12000 Hz
  • 10: 11025 Hz
  • 11: 8000 Hz
  • 12: 7350 Hz
  • 13: Reserved
  • 14: Reserved
  • 15: frequency is written explictly

Channel Configurations

These are the channel configurations:

  • 0: Defined in AOT Specifc Config
  • 1: 1 channel: front-center
  • 2: 2 channels: front-left, front-right
  • 3: 3 channels: front-center, front-left, front-right
  • 4: 4 channels: front-center, front-left, front-right, back-center
  • 5: 5 channels: front-center, front-left, front-right, back-left, back-right
  • 6: 6 channels: front-center, front-left, front-right, back-left, back-right, LFE-channel
  • 7: 8 channels: front-center, front-left, front-right, side-left, side-right, back-left, back-right, LFE-channel
  • 8-15: Reserved

from:http://my.oschina.net/zhangxu0512/blog/204070

相关文章:

【怎样写代码】对象克隆 -- 原型模式(二):解决方案

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

计算机二级周小丹,亲爱的设计丨周小丹:始终认真,才能保持“天真”

从事室内设计&#xff0c;女性好像天然占了一些优势&#xff0c;比如对色彩和美学的敏感性、更强的沟通能力以及相较大多数男性而言更细致的观察力等等。但在实操层面&#xff0c;室内设计这一行实则非常考验女性设计师的“体能”&#xff0c;比如下工地、熬夜赶图等等。从北京…

最近在招标中评审出一个政府信息化软件

发布时间&#xff1a; &#xff1a;2010-03-31 18:42 浏览次数&#xff1a; &#xff1a; 5 产品名称&#xff1a; 卓技协同政府审批系统 V3.0(http://http://www.exctek.com/)英文名&#xff1a; ExctekSoft.CGA(Collaborative Government Approval) 适用客户&#xff…

克里斯坦森的破坏性创新—《可以量化的管理学》

6.4.4作用点与克里斯坦森的破坏性创新 内容提要&#xff1a;消费者对商品的需求焦点会随着商品的发展而从功能性到可靠性&#xff0c;到便利性&#xff0c;最后转移到价格。克莱顿•克里斯坦森(Clayton M. Christensen)所创造的破坏性创新就是指消费者需求焦点的转移&#xff0…

【怎样写代码】对象克隆 -- 原型模式(三):原型模式

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

楼主考南师计算机学硕,南京师范大学考研详解:据说这所学校不太好考?嗯,是真的!...

学校&#xff1a;南京师范大学地区&#xff1a;江苏省属性&#xff1a;“211工程”院校、“双一流”世界一流学科建设高校关于南师大南京师范大学&#xff0c;地处江苏南京&#xff0c;拥有绝佳的地理位置。在全国第四轮学科评估中&#xff0c;2个学科获得A&#xff0c;4个学科…

asp页面和Asp.net页面传中文参数UrlEncode编码以及接收解码

在asp中加一个链接&#xff0c;指向asp.net网页&#xff0c;但asp.net的网址是经过HttpUtility.UrlEncode转换和HttpUtility.UrlDecode解码的&#xff0c;而asp的server.urlencode却和HttpUtility.UrlEncode的编码方式不一样&#xff0c; 举例&#xff1a;asp.net用Get方式传输…

MyBatis关联查询、多条件查询

MyBatis关联查询、多条件查询 1、一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1、数据库表的设计 班级表&#xff1a; 教师表&#xff1a; 2、实体类的设计 班级表&#xff1a; public class Classes { 9 //定义实体类的属性&#xff0c;与class表中的字段对…

【怎样写代码】对象克隆 -- 原型模式(四):浅克隆与深克隆

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

计算机与控制学院优秀学生,三好学生主要事迹:计算机与控制工程学院王天琪事迹.doc...

三好学生主要事迹&#xff1a;计算机与控制工程学院王天琪事迹“中国好同学”、“中国好男孩”、“中国好男友”——用这“三好”来形容王天琪再合适不过。这个四川男生笑容温暖&#xff0c;彬彬有礼&#xff0c;生长于南方却操着一口标准的普通话&#xff0c;交谈中时而有些羞…

[总结]博客聚合-cnblogs,wordpress,live writer,word2010

一、url地址&#xff1a; cnblogs&#xff1a; http://BusyAnt.cnblogs.com/services/metaweblog.aspx wordpress: http://blog.busyant.cn/xmlrpc.php CSDN&#xff1a;http://blog.csdn.net/busyant/services/metablogapi.aspx 二、配置&#xff1a; word2010&#xff1a;文件…

【怎样写代码】对象克隆 -- 原型模式(五):原型管理器的引入和实现

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

Android 基于 Speex 的高度封装语音库,0 耦合,没三方jar包

作者&#xff1a;林冠宏 / 指尖下的幽灵 掘金&#xff1a;https://juejin.im/user/587f0dfe128fe100570ce2d8 博客&#xff1a;http://www.cnblogs.com/linguanh/ GitHub &#xff1a; https://github.com/af913337456/ 为了您的直观体验&#xff0c;请务必看完下面 截图&#…

计算机累加器有加法器功能吗,累加器-累加器ACC的作用

ACC累加器B用于辅助累加器做某些运算的寄存器PSW程序状态字其中最高位是进/借位标志C&#xff1b;PSW.6是辅助进位标志AC&#xff0c;用于标识加减运算中低四位向高四位的进位&#xff1b;PSW.4和PSW.3是寄存器组选择位RS1和RS0&#xff0c;用于从--1FH的32个存储器单元(4组)中…

object expected错误解决方法

写一个页面&#xff0c;引用了另外的js&#xff0c;结果触发js事件时&#xff0c;浏览器显示"object expected "错误&#xff0c;说什么action有错&#xff0c;在action硬是纠结了半天&#xff0c;结果发现是由于action跳转之后&#xff0c;路径错了&#xff0c;所以…

Eclipse优化之设置不自动弹出控制台和Server

有时候Eclipse启动&#xff0c;控制台console不会自动跳出来&#xff0c;需要手工点击该选项卡才行&#xff0c; 按下面的设置&#xff0c;可以让它自动跳出来(或不跳出来)&#xff1a; windows -> preferences -> run/debug -> console 在右边面板勾选或…

【怎样写代码】复杂对象的组装与创建 -- 建造者模式(一):问题案例

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

css menu builder,AutoPlay Menu Builder使用教程【图文教程】

是一个功能强大的光盘自动运行菜单制作工具&#xff0c;使用它,你不需要具备任何专业知识,只需要经过鼠标拖放和几次鼠标点击就可以轻松制作出非常漂亮的自动运行(AutoRun)菜单程序,让你制作菜单象垒积木一样容易!二、软件使用1、如图一所示&#xff0c;软件启动时首先随程序主…

freemarker写select组件报错总结(六)

1、错误描写叙述 六月 26, 2014 10:53:26 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template processing error: "Expression data[text] is undefined on line 9, column 51 in inc/select.ftl."Expression data[text] is undefined on lin…

FPGA中LVDS差分高速传输的实现

低压差分传送技术是基于低压差分信号(Low Volt-agc Differential signaling)的传送技术&#xff0c;从一个电路板系统内的高速信号传送到不同电路系统之间的快速数据传送都可以应用低压差分传送技术来实现&#xff0c;其应用正变得越来越重要。低压差分信号相对于单端的传送具有…

【怎样写代码】复杂对象的组装与创建 -- 建造者模式(二):解决方案

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

自动化测试selenium+java学习笔记

//driver后面接 get(String url) 访问指定url页面 getCurrentUrl() 获取当前页面的url地址 getTitle() 获取当前页面的标题 getPageSource() 获取当前页面源代码 quit() …

JS实现继承的几种方法

父类&#xff1a; // 定义一个动物的类 function Animal (name) {// 属性this.name name || Animal;// 实例方法this.sleep function(){console.log(this.name 正在睡午觉&#xff01;);} } // 原型方法 Animal.prototype.eat function(food) {console.log(this.name 正在…

【怎样写代码】复杂对象的组装与创建 -- 建造者模式(四):扩展案例

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

接口测试和单元测试的区别

1、单元测试注重代码逻辑&#xff0c;接口测试注重业务逻辑&#xff1b; 2、单元测试的粒度最小&#xff0c;是测试最小独立的单元模块&#xff08;不依赖其他模块&#xff09;&#xff1b;接口测试不是&#xff0c;会覆盖很多&#xff1b; 3、单元测试是白盒测试&#xff0c…

改善FLEX/FLASH性能的小技巧(转)

使用下面的几个改善性能的技巧&#xff0c;如果你使用Flex Builder&#xff0c;那么可以使用调试窗口查看你的程序中关键的几步创建对象和内存回收的情况。有时细小的调整会造成很大的不同。下面是一小部分能够改善你的程序性能的做法&#xff1a;1)如果不知道一个对象的类型&a…

机器学习算法(3:决策树算法)

一、决策树简介 决策树是附加概率结果的一个树状的决策图&#xff0c;是直观的运用统计概率分析的图法。机器学习中决策树是一个预测模型&#xff0c;它表示对象属性和对象值之间的一种映射&#xff0c;一颗决策树是一棵有向无环树&#xff0c;它由若干个节点、分支、分裂谓词以…

【怎样写代码】复杂对象的组装与创建 -- 建造者模式(三):建造者模式

如果喜欢这里的内容&#xff0c;你能够给我最大的帮助就是转发&#xff0c;告诉你的朋友&#xff0c;鼓励他们一起来学习。 If you like the content here, you can give me the greatest help is forwarding, tell your friends, encourage them to learn together.

Junit单元测试需要知道的一些知识点

Junit单元测试框架—基于java语言对的主流单元测试框架 beforeClass—位于数据准备前期或者其他前期准备&#xff08;测试类调用前&#xff09; --用于提取代码中的共用部分减少冗余&#xff0c;只能声明注解一次 --必须在public static void,方法名随意&#xff0c;&#x…

关闭Windows 2000/XP/2003默认共享

Windows 2000/XP/2003版本的操作系统提供了默认共享功能&#xff0c;这些默认的共享都有“$”标志&#xff0c;意为隐含的&#xff0c;包括所有的逻辑盘&#xff08;C$&#xff0c;D$&#xff0c;E$……&#xff09;和系统目录Winnt或Windows&#xff08;admin$&#xff09;。 …