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

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

  1. WebRTC 中 SDP 信息解析

    TL;NR 更详细的 WebRTC SDP 解析请参考 https://tools.ietf.org/html/draft-ietf-rtcweb-sdp-14 0x00 前言 SDP (Sessio ...

  2. java解析tcp报文_JAVA语言TCP通信和JDBC示例(AIS信息解析)

    JAVA实现AIS信息的接受,解析和存储 船舶自动识别系统(Automatic Identification System, 简称AIS)是一种新型的助航设备.AIS基本功能是:将本船和他船的精确船位 ...

  3. 信息: 解析 HTTP 请求 header 错误 java.lang.IllegalArgumentException: 在方法名称中发现无效的字符串, HTTP 方法名必须是有效的符号.

    信息: 解析 HTTP 请求 header 错误 Note: further occurrences of HTTP request parsing errors will be logged at ...

  4. 【PHP】获取浏览器HTTP请求header信息、获取服务器HTTP响应header信息

    一.认识HTTP HTTP协议历史及设计思路(点击浏览) 二.获取浏览器HTTP请求header信息 1. Apach服务器下可以直接使用 PHP自带函数获取客户端HTTP请求头信息 /*作用:获取客 ...

  5. JS设计模式——3.封装与信息隐藏

    封装.信息隐藏与接口的关系 信息隐藏是目的,封装是手段. 接口提供了一份记载着可供公共访问的方法的契约.它定义了两个对象间可以具有的关系.只要接口不变,这个关系的双方都是可以替换的. 一个理想的软件系 ...

  6. nginx 修改html header,nginx 安全笔记 (修改nginx的header信息和错误显示版本号)

    nginx 安全笔记 (修改nginx的header信息和错误显示版本号) 发布时间:2020-08-07 16:18:18 来源:51CTO 阅读:1189 作者:674591788 随笔记载,欢迎 ...

  7. 使用Feign时如何设置Feign的Header信息

    2019独角兽企业重金招聘Python工程师标准>>> Feign 调用接口是经常会忘header信息,再次介绍两种忘header里面添加信息的方式: 1. 通过直接在请求上,或者在 ...

  8. feign调用如何传递token_feign加入熔断器之后转发不了token等header信息

    feign加入hystrix熔断器之后转发不了token等header信息,我把熔断注释了,就可以转发.但这不是我想要的答案. 转发代码如下: @Configuration public class ...

  9. headerIP php_PHP curl伪造IP地址和header信息代码实例

    原标题:PHP curl伪造IP地址和header信息代码实例 curl虽然功能强大,但是只能伪造$_SERVER["HTTP_X_FORWARDED_FOR"],对于大多数IP地 ...

最新文章

  1. 划重点!2020年,这些前沿技术最受关注
  2. Compiling Fortran
  3. Vivado生成bitstream报错,DRC NSTD-1与DRC UCIO-1]
  4. python模块和类_Python类、模块、包的区别
  5. 独家对话谢宝友:做一款类似于 Linux 的国产操作系统 | 人物志
  6. RabbitMQ学习之spring-amqp的重要类的认识
  7. javascript设计模式-抽象工厂模式
  8. 上号神器扫码登录网站使用教程
  9. 河北关于加快新型建筑工业化发展的实施意见发布
  10. 文件关联修复工具(用文本文档保存后后缀修改为bat)
  11. EXCEL转PDF最便捷的方法
  12. startwith的使用方法
  13. Spring ioc 详解
  14. JS循环输出数组及数组键值
  15. 人工智能实训室解决方案
  16. Flink实操 : 算子操作
  17. VC单文档对话框添加托盘图标
  18. linux系统工程师----2.linux中内核级加强型火墙的管理
  19. 谷粒学院——Day09【整合阿里云视频点播】
  20. MATLB|基于matpower优化调度的风力模型预测

热门文章

  1. 为什么free()时不需要传指针大小
  2. Windows下安装Mongodb SpringBoot集成MongoDB和Redis多数据源
  3. 不要千言万语,一组漫画让你秒懂最终一致性
  4. Apache服务器下使用 ab 命令进行压力测试
  5. 介绍几款浏览器兼容性测试工具
  6. Javascript Tip(1) 操作剪贴板
  7. Linux环境安装卸载JDK以及安装Tomcat和发布Java的web程序
  8. WMI技术介绍和应用——查询系统信息和补丁包信息
  9. C++11中std::async的使用
  10. SIFT特征提取算法总结