AAC_LC用LATM封装header信息解析

通常来说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

时间: 2024-11-05 11:40:33

AAC_LC用LATM封装header信息解析的相关文章

aac adts &amp; LATM封装码流分析

本文继续上一篇文章的内容,介绍一个音频码流处理程序.音频码流在视频播放器中的位置如下所示. 本文中的程序是一个AAC码流解析程序.该程序可以从AAC码流中分析得到它的基本单元ADTS frame,并且可以简单解析ADTS frame首部的字段.通过修改该程序可以实现不同的AAC码流处理功能. 原理 AAC原始码流(又称为"裸流")是由一个一个的ADTS frame组成的.他们的结构如下图所示. 其中每个ADTS frame之间通过syncword(同步字)进行分隔.同步字为0xFFF(

【转帖】客户端通过 HTTP 请求和响应 的 Header 信息总结

请求Header原帖地址:http://technique-digest.iteye.com/blog/1174581 响应Header原帖地址:http://blog.pfan.cn/hurongliang/24720.html 客户端HTTP请求的Header信息 1.HTTP请求方式 如下表: 方 法 描 述 GET 向Web服务器请求一个文件 POST 向Web服务器发送数据让Web服务器进行处理 PUT 向Web服务器发送数据并存储在Web服务器内部 HEAD 检查一个对象是否存在 D

RTP协议之Header结构解析

实时传输协议 RTP,RTP 提供带有实时特性的端对端数据传输服务,传输的数据如:交互式的音频和视频.那些服务包括有效载荷类型定义,序列号,时间戳和传输监测控制.应用程序在 UDP 上运行 RTP 来使用它的多路技术和 checksum 服务.2 种协议都提供传输协议的部分功能.不过,RTP 可能被其他适当的下层网络和传输协议使用.如 果下层网络支持,RTP 支持数据使用多播分发机制转发到多个目的地. 注意 RTP 本身没有提供任何的机制来确保实时的传输或其他的服务质量保证,而是由低层的服务来完

Http Header信息&amp;状态码

Header信息 (Status-Line):状态项,包括协议类型,http返回码和状态:  Cache-control:是否可以被缓存(public可以:private和no-cache不可以:max-age表示可被缓存的时间长) Expires:过期时间,优先级低于cache-control中的max-age. Last-Modified:文件的上一次/最近一次的修改时间. Age:从最近一次被cache到节点的时刻到本次请求发起的时刻直接的时间长. Connection:获取数据后是否保持

Header信息分析&amp;状态码

Header信息 (Status-Line):状态项,包括协议类型,http返回码和状态:  Cache-control:是否可以被缓存(public可以:private和no-cache不可以:max-age表示可被缓存的时间长) Expires:过期时间,优先级低于cache-control中的max-age. Last-Modified:文件的上一次/最近一次的修改时间. Age:从最近一次被cache到节点的时刻到本次请求发起的时刻直接的时间长. Connection:获取数据后是否保持

RestTemplate发送请求并携带header信息

1.使用restTemplate的postForObject方法 注:目前没有发现发送携带header信息的getForObject方法. HttpHeaders headers = new HttpHeaders(); Enumeration<String> headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()) { String key = (String) headerNames.next

javaBean 练习—封装学生信息

编写一个封装学生信息的JavaBean对象,在页面中调用该对象,并将学生信息输出在页面中. 1 package com.sp.test; 2 3 public class Student { 4 private String name; 5 private int xuehao; 6 private String sex; 7 private String banji; 8 public String getName() { 9 return name; 10 } 11 public void

银行卡信息解析

详情链接:http://www.haoservice.com/docs/146 银行卡信息查询,卡信息解析 支持格式: JSON/XML 请求方式: GET/POST 明文方式请求参数:   名称 类型 必填 说明   key string 是 API KEY   cardNo String 是 银行卡号 密文方式请求参数:   名称 类型 必填 说明   IsEncrypt bool 是 是否密文传输方式   key string 是 API KEY   params string 是 3de

从返回的HTTP Header信息中隐藏Apache的版本号及PHP的X-Powered-By信息

默认情况下,很多apache安装时会显示版本号及操作系统版本,甚至会显示服务器上安装的是什么样的apache模块.这些信息可以为黑客所用,并且黑客还可以从中得知你所配置的服务器上的很多设置都是默认状态. 这里有两条语句,你需要添加到你的httpd.conf文件中:ServerSignature OffServerTokens Prod ServerSignature该参数设置 出现在apache所产生的像404页面.目录列表等页面的底部,三个选项 On|Off|EMai 主要起开关作用,推荐设置