AAC头部格式

一共有2种AAC头格式,一种是StreamMuxConfig,另一种是AudioSpecificConfig

1、AudioSpecificConfig

读写header的代码参考
    ffmpeg libavcodec\aacenc.c put_audio_specific_config()

    ffmpeg libavcodec\mpeg4audio.c avpriv_mpeg4audio_get_config()
    fdk-aac libMpegTPEnc\src\tpenc_asc.cpp transportEnc_writeASC()

    libaacplus aacplusenc.c aacplusEncGetDecoderSpecificInfo()

 

ISO文档 14496-3
    1.6.2.1 "Syntax - AudioSpecificConfig"
http://www.nhzjj.com/asp/admin/editor/newsfile/2010318163752818.pdf

 

该Header的主要成员
  audioObjectType: 基本的object type用5个比特表示。2是AAC-LC,5是SBR,29是PS。
  samplingFrequencyIndex: 4个比特,用来表示采样率表中的索引号
  channelConfiguration: 4个比特,声道数

  if (audioObjectType == 5 || audioObjectType == 29)

    extensionSamplingFrequencyIndex: 4个比特,表明实际的音频采样率

    audioObjectType:  5个比特,表明基本层编码的AOT
  GASpecificConfig
    frameLengthFlag: 1个比特,0表示帧长为1024,1表示帧长为960
    DependsOnCoreCoder: 1个比特
    extensionFlag: 1个比特

 

剩余的扩展字段 

  syncExtensionType:  11个比特,0x2b7表示HE-AAC的扩展

  if (syncExtensionType == 0x2b7) {

    extensionAudioObjectType: 5个比特

    if ( extensionAudioObjectType == 5 ) {

      sbrPresentFlag: 1个比特
      if (sbrPresentFlag == 1) {
        extensionSamplingFrequencyIndex: 4个比特

      }

    }

  }

 

object type、sample rate详细表格可以参考
http://wiki.multimedia.cx/index.php?title=MPEG-4_Audio

 

如果是HE-AAC,有两种explicit和implicit一共三种声明模式。在explicit模式一(hierarchical signaling),AOT是5,然后在channels之后会有扩展的采样率和AOT字段(这里的AOT用于表明基本层编码,一般是2 AAC-LC),fdk_aac采用的这种方式;在explicit模式二(backward compatible signaling),AOT仍然是2(AAC-LC),但在GASpecificConfig后会有同步字0x2b7和sbrPresentFlag,libaacplus采用的是这种方式;在implicit模式,AOT仍然是2(AAC-LC),AudioSpecificConfig没有任何扩展,仍只是2个字节,需要靠解码器在AAC码流中找到SBR的数据

参考论文《A closer look into MPEG-4 High Efficiency AAC》

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.129.4563&rep=rep1&type=pdf

http://developer.apple.com/library/ios/#technotes/tn2236/_index.html

 

 

2、StreamMuxConfig
写header的代码参考
    ffmpeg libavformat\latmenc.c latm_write_frame_heade()
    ffmpeg libavcodec\aacdec.c read_stream_mux_config()
    fdk-aac libMpegTPEnc\src\tpenc_latm.cpp CreateStreamMuxConfig()

 

ISO文档 14496-3
    1.7.3 Multiplex Layer

 

 

其他相关的

1、TS流可以使用ADTS和LATM两种封装格式。在ffmpeg的mpegtsenc中,用了一个amux的AVFormatContext,先把非ADTS的raw aac流写成ADTS或者LATM格式,然后再写入TS流

2、FLV/RTMP有两种AAC AUDIO DATA,0是AudioSpecificConfig,1是raw的AAC流。可以参考flv格式的官方说明文档

http://download.macromedia.com/f4v/video_file_format_spec_v10_1.pdf

3、AAC的LATM over RTP打包格式定义在RFC 3016。SDP中几个参数含义:object,就是AAC的AOT;cpresent=0,表示StreamMuxConfig不出现在码流中;config,就是StreamMuxConfig用base16进行编码。每个RTP包的载荷,最前面是PayloadLengthInfo,每出现一个0xFF表示帧长度+255,直至非0xFF就是剩余的长度;然后就是PayloadMux即AAC的裸流

4、AAC的另外一种RTP打包格式是mpeg4-generic,定义在RFC 3640。SDP中几个参数含义:config,就是AudioSpecificConfig的十六进制表示;sizeLength=13; indexLength=3,这是每个rtp包头都是固定的。每个RTP包的载荷,最前面2个字节一般是0x00 10,这是 AU-headers-length,表示AU header的长度是16个比特也就是2个字节。后面2个字节,高13位是AAC帧的长度,低3位为0。

时间: 2024-11-01 09:18:57

AAC头部格式的相关文章

AAC头部格式,RTP打包格式

一共有2种AAC头格式,一种是StreamMuxConfig,另一种是AudioSpecificConfig 1.AudioSpecificConfig 读写header的代码参考    ffmpeg libavcodec\aacenc.c put_audio_specific_config()     ffmpeg libavcodec\mpeg4audio.c avpriv_mpeg4audio_get_config()    fdk-aac libMpegTPEnc\src\tpenc_a

Ethernet IP TCP UDP 协议头部格式

The Ethernet header structure is shown in the illustration below: 以太网头部14 bytes Destination Source Len Data unit + pad FCS (6 bytes) (6 bytes) (2) (46-1500 bytes) (4 bytes) Ethernet header structure The IP header structure is as follows: IP头部20 bytes

什么是AAC格式

AAC(Advanced Audio Coding),中文称为"高级音频编码",出现于1997年,基于 MPEG-2的音频编码技术.由Fraunhofer IIS.杜比实验室.AT&T.Sony(索尼)等公司共同开发,目的是取代MP3格式.2000年,MPEG-4标准出现后,AAC 重新集成了其特性,加入了SBR技术和PS技术,为了区别于传统的 MPEG-2 AAC 又称为 MPEG-4 AAC. Advanced Audio Coding.一种专为声音数据设计的文件压缩格式,

AAC 格式分析

一SADTS格式:        ADTS的全称是Audio Data Transport Stream.是AAC音频的传输流格式.        AAC音频格式在MPEG-2(ISO-13318-7 2003)中有定义.AAC后来又被采用到MPEG-4标准中.        1. adts_sequence()        {               while (nextbits() == syncword)               {                      a

AAC 文件解析及解码流程

OUTLINE:          * AAC概述          * AAC规格简述          * AAC特点              * AAC音频文件解析             --ADIF&ADTS格式             --ADIF&ADTS头信息             --ADIF&ADTS数据信息             --AAC文件处理流程          * AAC解码流程             --技术解析          * 术语

android-关于speex转换语音格式的问题

问题描述 关于speex转换语音格式的问题 请问一下,使用speex怎么可以把语音的amr转成aac格式的语音.在这里下载的demo大部分不能用,谢谢你们!!! 解决方案 [多媒体] 用SPEEX将PCM音频编码成AAC 虽然格式不满足你的要求,但是还是希望你能借鉴它的部分.

《部署IPv6网络(修订版)》一2.2 IPv6分组格式

2.2 IPv6分组格式 部署IPv6网络(修订版) 在IPv6中对IP分组头部结构作了修改.这些改动反映了从多年运营IPv4中学到的一些教训,它们对协议操作具有重大影响.由于这些原因,在以下小节将简单地回顾一下IPv6分组格式. 2.2.1 IPv6和IPv4基本头部格式 为了理解是什么促使对IPv6分组头部结构的改动,重要的是回顾其前身(IPv4)的结构. 一个分组有两部分:包含第3层信息的头部,携带数据和高层协议信息的净荷.RFC 791定义了IPv4分组头部的下列字段: 版本(4位)--

托管PE文件

中间语言 在.NET框架中,公共语言基础结构使用CLS来绑定不同的语言.通过要求不同的语言至少要实现CTS包含在CLS中的部分,公共语言基础结构允许不同的语言使用.NET框架.因此,在.NET框架中,所有的语言(C#.VB.NET.Effil.NET等)最后都被转换为了一种通用语言:微软中间语言(Microsoft Intermediate Language,MSIL,以下简称IL). IL是一种介于高级语言和基于Intel的汇编语言的中间语言,是.NET平台的汇编语言.当用户编译一个.NET程

IPv6是什么?IPv6的特点与优势

IPv6是Internet Protocol Version 6的缩写,其中Internet Protocol译为"互联网协议".IPv6是IETF(互联网工程任务组,Internet Engineering Task Force)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议.目前IP协议的版本号是4(简称为IPv4),它的下一个版本就是IPv6. IPv6是"Internet Protocol Version 6"的缩写,它是IETF设计的用于替代现