https://blog.csdn.net/qinglongzhan/article/details/81315532?utm_source=blogxgwz0

1. 打开faac编码器引擎。
   faacEncHandle FAACAPI faacEncOpen(   
        unsigned long sampleRate,      // pcm音频采样率,8k,16k,44100等
        unsigned int numChannels,      // pcm音频通道,mono = 1 / stereo = 2
        unsigned long *inputSamples,   // 一次输入的样本数
        unsigned long *maxOutputBytes);// 输出aac buffer的最大size   
        函数调用成功会return一个编码器faacEncHandle,同时确定输入样本数和输出aac buffer最大size;
 
    申请输入buffer及输出buffer
    int     nPCMBufferSize = inputSamples * nPCMBitSize / 8; //nPCMBitSize 单次样本位数
    unsinged char*   pbPCMBuffer = new BYTE[nPCMBufferSize];
    unsigned char*   pbAACBuffer = new BYTE[maxOutputBytes];
 
 
2. 获取当前编码器配置。
   faacEncConfigurationPtr FAACAPI faacEncGetCurrentConfiguration(
        faacEncHandle hEncoder); //编码器handle
    函数调用成功会返回一个faacEncConfigurationPtr用来查看及设置编码器配置。
 
3. 修改当前编码器的配置并设置。
   //copy this struct from headfile
   typedef struct faacEncConfiguration{
    /* config version - 配置版本,可以默认不设置*/
    int version;
    /* library version - 库版本,可以默认不设置*/     
    char *name;
    /* copyright string - 版权,可以默认不设置*/   
    char *copyright;       
    /* MPEG version, 2 or 4 - MPEG版本,MPEG2 or MPEG4*/
    unsigned int mpegVersion;
    /* AAC object type - AAC对象类型,详细见补充说明1,取值:1-MAIN 2-LOW 3-SSR 4-LTP*/
    unsigned int aacObjectType;
    /* Allow mid/side coding - 是否允许mid/side coding, 详细见补充说明2,取值:0-NO 1-YES*/
    unsigned int allowMidside;
    /* Use one of the channels as LFE channel - 是否允许一个通道为低频通道,取值:0-NO 1-YES*/
    /* LFE(low-frequencyeffects) */
    unsigned int useLfe;
    /* Use Temporal Noise Shaping - 瞬时噪声定形(temporal noise shaping,TNS)滤波器,取值:0-NO 1-YES*/
    unsigned int useTns;
    /* bitrate / channel of AAC file - AAC文件的bitrate / channel 取值:0和48000都可以,暂时不清楚这个参数作用*/
    unsigned long bitRate;
    /* AAC file frequency bandwidth - 频宽 取值:0, 32000,64000都可以,暂时不清楚参数作用*/
    unsigned int bandWidth;
    /* Quantizer quality - 编码质量,取值:efault=100 LOWER<100 HIGHER>100*/
    /* 默认100,值越大音质越高 */
    unsigned long quantqual;
    /* Bitstream output format (取值:0 = Raw; 1 = ADTS) - 输出数据类型(是否包包含adts头),录制MP4文件时,要用raw流,ADTS详细见补充说明3*/
    unsigned int outputFormat;
    /* psychoacoustic model list*/
    psymodellist_t *psymodellist;
    /* selected index in psymodellist*/
    unsigned int psymodelidx;
    /*
    PCM Sample Input Format  - 输入pcm数据类型
    0 FAAC_INPUT_NULL    invalid, signifies a misconfigured config
    1 FAAC_INPUT_16BIT native endian 16bit
    2 FAAC_INPUT_24BIT native endian 24bit in 24 bits(not implemented)
    3 FAAC_INPUT_32BIT native endian 24bit in 32 bits (DEFAULT)
    4 FAAC_INPUT_FLOAT 32bit floating point
    */
    unsigned int inputFormat;
    /* block type enforcing -
     * (SHORTCTL_NORMAL/SHORTCTL_NOSHORT/SHORTCTL_NOLONG)
     */
    int shortctl;
    /*
        Channel Remapping
        Default         0, 1, 2, 3 ... 63  (64 is MAX_CHANNELS in coder.h)
        WAVE 4.0        2, 0, 1, 3
        WAVE 5.0        2, 0, 1, 3, 4
        WAVE 5.1        2, 0, 1, 4, 5, 3
        AIFF 5.1        2, 0, 3, 1, 4, 5
    */
    int channel_map[64];    
} faacEncConfiguration, *faacEncConfigurationPtr;   
 
参数设置示例:
第一步:    
    faacEncConfigurationPtr pConfiguration;
    pConfiguration->outputFormat = 1;
    pConfiguration->aacObjectType = LOW;
    pConfiguration->bitRate = 48000;    // or 0
    pConfiguration->bandWidth = 64000;  //or 0 or 32000
    pConfiguration->inputFormat = FAAC_INPUT_16BIT;
 
    /*下面可以选择设置*/
    pConfiguration->allowMidside = 1;
    pConfiguration->useLfe = 0;
    pConfiguration->useTns = 0;        
    pConfiguration->quantqual = 100;
    pConfiguration->outputFormat = 1;
    pConfiguration->shortctl = SHORTCTL_NORMAL;  
 
第二步:
    int FAACAPI faacEncSetConfiguration( //设置编码器配置
        faacEncHandle hEncoder,
        faacEncConfigurationPtr config);
 
4.进行编码操作(PCM to AAC)
    /* 请见步骤1中这部分
    int nPCMBufferSize = inputSamples * nPCMBitSize / 8;
    unsinged char*   pbPCMBuffer = new BYTE[nPCMBufferSize];
    unsigned char*   pbAACBuffer = new BYTE[maxOutputBytes];
    */
    先获取PCM数据,填充到pbPCMBuffer,单次获取长度为nPCMBufferSize。
 
    int FAACAPI faacEncEncode(
        faacEncHandle hEncoder,
        int32_t * inputBuffer,       //pcm输入buffer, pbPCMBuffer
        unsigned int samplesInput,   //一次输入的样本数(注意不是数据长度 ),samplesInput
        unsigned char *outputBuffer, //AAC输出buffer, pbAACBuffer
        unsigned int bufferSize);
        函数调用成功会返回实际AAC数据大小,从pbAACBuffer中读出即可。
 
5. 结束关闭编码器退出。
    int FAACAPI faacEncClose(faacEncHandle hEncoder);

转载于:https://www.cnblogs.com/dagao/p/10661496.html

libfaac个个参数说明相关推荐

  1. linux防火墙配置说明,Linux防火墙配置命令参数说明

    规则操作参数说明: -A:在所选择的链末添加一条或更多规则: -D:从所选链中删除一条或更多规则.有两种方法:把被删除规则指定为链中的序号(第一条序号为1),或者指定为要匹配的规则: -R:从选中的链 ...

  2. 【笔记】位图(.bmp)和矢量图(Vector):位图是点阵图或光栅图,使用像素的一格一格来描述图像,放大以后每一个像素看就像是一个个的马赛克;矢量图是使用直线和曲线来描述图形,可以无限方法,不会失真

    一.什么是位图 计算机能以位图和矢量图格式显示图像. 1.位图(Bitmap): 图像又称点阵图或光栅图,它使用我们称为像素(象素,Pixel)的一格一格的小点来描述图像.计算机屏幕其实就是一张包含大 ...

  3. 液晶显示器的参数说明-购买夜晶显示器指南

    准备将本人的CRT换成LCD,所以先去网上看夜晶显示器的参数说明或者购买指南等等,我在Baidu或者其他的一些搜索上找到资料很少,最后还是找到了一些,收集给需要的朋友看看吧! 正文:当我们在看液晶显示 ...

  4. Linux下使用 ipset 封大量IP及ipset参数说明

    转载Linux下使用 ipset 封大量IP及ipset参数说明 Linux使用iptables封IP,是常用的应对网络攻击的方法,但要封禁成千上万个IP,如果添加成千上万条规则,对机器性能影响较大, ...

  5. VS Code 安装插件、自定义模板、自定义配置参数、自定义主题、配置参数说明、常用的扩展插件

    1. 下载和官网教程 下载地址:https://code.visualstudio.com/ 官方教程:https://code.visualstudio.com/docs 2. 安装插件 安装扩展插 ...

  6. arcgis合并tif影像_微图影像地图导出拼接大图的参数说明

    1. 概述 微图是一款集地图下载与GIS功能于一体的轻量级GIS产品,相较于X3版本的万能地图下载器,它有更丰富的地图数据和更专业的GIS功能. 尽管微图的软件界面已经足够简洁明了,但为了让新用户能更 ...

  7. dbcp 连接池参数说明

    dbcp 连接池参数说明 参考: http://commons.apache.org/proper/commons-dbcp/configuration.html https://www.cnblog ...

  8. 从头到尾使用Geth的说明-3-geth参数说明和环境配置

    1.参数说明 ETHEREUM选项:--config value TOML 配置文件--datadir "/home/user4/.ethereum" 数据库和keystore密钥 ...

  9. ps aux参数说明

    运行 ps aux 的到如下信息:   ps aux USER    PID   %CPU %MEM VSZ   RSS TTY    STAT   START TIME COMMAND smmsp ...

最新文章

  1. Python异常处理体系简介(1)
  2. C# 编码约定(C# 编程指南)
  3. 关闭(杀死)8080端口
  4. 聊聊spring cloud gateway的XForwardedHeadersFilter
  5. 【ES8(2017)】async / await
  6. Python 3 Basics
  7. SAP License:SAP顾问的可持续性发展
  8. PyTorch实战福利从入门到精通之七——卷积神经网络(LeNet)
  9. 『001』如何在自己的网页里引入一个聊天机器人(。・∀・)ノ
  10. python学习-3.一些常用模块用法
  11. Atitit 反模式 黑名单 异常处理 反模式(antipatterns) 目录 1.1. 记录并抛出(log and throw) 1 1.2. 抛出异常基类(Throwing Excepti
  12. c语言 称重系统设计,基于L—PSIII的电子称重系统的设计
  13. 【基础整理】Mapping representation 机器人所用地图种类及相关介绍
  14. python关于类、self、_init_的应用
  15. 脸部识别是根据什么识别的_我们需要知道面部识别失败的频率
  16. “毒液” 高危漏洞背后的技术较量
  17. LIO-SAM中的mapOptmization
  18. 体积 524MB,无广告!微信输入法来了
  19. 论文的正确打开方式—如何细读一篇论文分享
  20. bukgu 杂项 图穷匕见

热门文章

  1. csharp为何不流行_“我太南了”这些年度流行语到底是怎么选的?
  2. python split拆分字符串_python实现字符串完美拆分split()的方法
  3. mysql 修改字段注释_MySQL数据库+命令大全,人手一份的实操攻略来啦
  4. 人脸对齐(十九)--Regressing a 3D Face Shape from a Single Image
  5. java开发个人项目_个人项目-WC (java实现)
  6. php 修改服务器ip,php 修改服务器ip
  7. html5标签 不可修改,SEO优化不可忽视的5个Html代码标签
  8. 【知识索引】【C++入门】
  9. yarn 内存与CPU参数设置
  10. docker容器启动与停止命令