首先FAAC和FAAD的下载地址在前面的博文里有。

FAAC和FAAD有win32的编译工程,相对其他开源项目来说,win32的编译很简单了

FAAC,FAAD的编码和解码也封装的非常好,使用上很简单。

打开FAAC编码器

m_faacHandle = faacEncOpen(isamplerate, ichannels, &m_uSampleInput, &m_uOutputBytes);

if( 0 == m_faacHandle )
  return false ;

faacEncConfigurationPtr faacCfg;

faacCfg = faacEncGetCurrentConfiguration(m_faacHandle);

if (faacCfg->version != FAAC_CFG_VERSION){
  return false ;
 }

//* 设置配置参数
 faacCfg->aacObjectType = LOW;    //LC编码
 faacCfg->mpegVersion = MPEG4;  //
 faacCfg->useTns   = 1 ;                   //时域噪音控制,大概就是消爆音
 faacCfg->allowMidside = 0 ;            //
 faacCfg->bitRate  = m_nBitRate/m_uChannelNums;
 faacCfg->bandWidth  = 0 ;              //频宽
 faacCfg->outputFormat = isADTS;  //输出是否包含ADTS头
 faacCfg->inputFormat = FAAC_INPUT_16BIT;
 //faacCfg->shortctl = 0 ;
 faacCfg->quantqual = 50 ;

//* 获取解码信息.
 //unsigned char* ucBuffer = NULL;
 //unsigned long ulDecoderSpecificInfoSize;
 //faacEncGetDecoderSpecificInfo(m_faacHandle, &ucBuffer, &ulDecoderSpecificInfoSize);

if (!faacEncSetConfiguration(m_faacHandle, faacCfg)){
  return false ;
 }

m_uSampleInput这个参数要注意,需要在编码时使用。是faac所使用的音频样片数量

随后就可以解码了

int iBytesWritten = faacEncEncode(m_faacHandle, (int32_t*)input, m_uSampleInput , output, outlen );

判断下iBytesWritten初始编码的几帧数据会返回0,0是数据被缓冲,并不是错误。

解码相对编码更简单。

但是遇到个问题,就是编码单声道的数据,解码会返回双声道,这对打开播放设备播放时造成了一定的

困扰。因为前期是将音频编码参数优先发送出来,接收端收到参数后会打开播放设备,现在得在数据解码后再打开

播放设备。

使用FAAC进行AAC编码相关推荐

  1. 【Android RTMP】音频数据采集编码 ( FAAC 音频编码参数设置 | FAAC 编码器创建 | 获取编码器参数 | 设置 AAC 编码规格 | 设置编码器输入输出参数 )

    文章目录 一. 头文件.成员变量准备 二. 创建 FAAC 编码器 三. 获取并设置 FAAC 编码器参数 四. 设置 FAAC 编码器编码标准 五. 设置 FAAC 编码器 AAC 编码规格 六. ...

  2. 【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频采样数据 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )

    文章目录 安卓直播推流专栏博客总结 一. FAAC 编码器编码 AAC 音频采样数据 二. 封装 RTMP 音频数据头 三. 封装 RTMP 音频数据类型 四. 拷贝 AAC 音频数据到 RTMPPa ...

  3. 【Android RTMP】音频数据采集编码 ( FAAC 编码器编码 AAC 音频解码信息 | 封装 RTMP 音频数据头 | 设置 AAC 音频数据类型 | 封装 RTMP 数据包 )

    文章目录 安卓直播推流专栏博客总结 一. FAAC 编码器编码 AAC 音频解码信息 二. 封装 RTMP 音频数据头 三. 封装 RTMP 音频数据类型 四. 拷贝 AAC 音频数据到 RTMPPa ...

  4. 采集音频和摄像头视频并实时H264编码及AAC编码

    0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术, ...

  5. 采集音频和摄像头视频并实时H264编码及AAC编码[转]

    0. 前言 我在前两篇文章中写了DirectShow捕获音视频然后生成avi,再进行264编码的方法.那种方法有一些局限性,不适合实时性质的应用,如:视频会议.视频聊天.视频监控等.本文所使用的技术, ...

  6. 音频之各种有损编码器的比较,AAC编码器之选择,频谱、差值比较,编码器下载

    音频有损编码有:aac,mp3,ogg(vobis),opus等.这里只讨论主流编码格式,aac编码器有faac,qaac,fhgacc,neroacc,fdkacc,falabaac等,其封装格式有 ...

  7. 音频编解码·实战篇(1)PCM转至AAC(AAC编码)

    音频编解码·实战篇(1)PCM转至AAC(AAC编码) 作者:柳大·Poechant 博客:blog.csdn.net/poechant 邮箱:zhongchao.ustc@gmail.com 日期: ...

  8. C++实现RTMP协议发送H.264编码及AAC编码的音视频

    C++实现RTMP协议发送H.264编码及AAC编码的音视频 RTMP(Real Time Messaging Protocol)是专门用来传输音视频数据的流媒体协议,最初由Macromedia 公司 ...

  9. RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播

    RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播 摘要: RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播 RTMP(Real Time Messaging Pro ...

最新文章

  1. 2007年上半年 网络工程师 上下午试卷【附带答案】
  2. 【JavaWeb】Access restriction The type is not accessible due to restriction on required library
  3. swingbench oracle rac,使用Swingbench压力测试Oracle RAC
  4. bigdecimal 保留两位小数_Python的保留小数及对齐
  5. ruhe anzjhuang mysql_Mysql配置安装过程
  6. 【华为云技术分享】Reactive模式优势与实践
  7. nginx ---- 配置成系统服务
  8. 利用SQLite在android上实现增删改查
  9. paip.分成系统会员推广分销系统的设计
  10. 见证云原生创变!CNBPS 2019云原生技术实践峰会圆满落幕
  11. TrueCrypt加密:TrueCrypt Mount卸载加密卷(3)
  12. 12个“无用”之美,你有没有被惊艳到?
  13. linux如何关闭netbios服务,Samba 'nmbd' NetBIOS名称服务守护程序拒绝服务漏洞
  14. VS Code 中解决 C++ 代码编写时的爆红
  15. windows使用WiFi-direct连接手机等设备
  16. Node.js结合Express框架项目搭建
  17. 使用Cytoscape画PPI网络图
  18. Hi3516A/Hi3516D SDK 安装以及升级使用说明
  19. ads1258_ADS1258高精度多通道模/数转换芯片
  20. 新加坡首富张勇的烦恼

热门文章

  1. 新视野大学英语 第四册 翻译
  2. app性能测试-cpu监控
  3. Dede列表页调用TAG标签的方法
  4. 制作MAC和Windows同时支持的U盘和移动硬盘
  5. Android 网络编程之OkHttp源码解析
  6. Windows 2012 修改或取消密码安全策略
  7. Mysql性能瓶颈深度定位分析
  8. minicom指令_minicom配置及说明
  9. 我还是没有忍住,于是乎我开通了lua语言学习专栏!
  10. 人工智能为游戏带来提升