aac开源库

今天在网上看了下aac的各种开源库的编码,在这里整理一下开放出来。

开源库的话大概有6套

1 FAAC, FAAD/FAAD2    ---编码只有AAC LC

使用简单,但是编码格式单一。

打开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是数据被缓冲,并不是错误。

 

解码相对编码更简单,不过编码单声道的数据,解码会返回双通道。

2 neroAACenc ---非商业可以使用(提供编码工具)

3  FFmpeg's native AAC encoder(part of libavcodec), experimental by the developers as of December 2010   ---只有AAC LC,且质量不好

4 libvo_aacenc, the Android VisualOn AAC encoder   ---只有AAC LC, opencore-amr-vo-aacenc,只有编码

5 libfdk-aac, the Fraunhofer FDK AAC libray  ---包含到HE-AACv2,且性能较好   opencore-amr-fdk-aac

libfdk-aac的开源库的编译需要记录一下

下载地址  https://github.com/mstorsjo/fdk-aac

首先需要下载cmake工具,我这里用的是CMake3.8.1的版本,安装的时候注意设置进环境变量,

然后需要配置cmakefile文件,也是从网上找了一个文件

脚本名称:CMakeLists.txt

# source code: git clone https://android.googlesource.com/platform/external/aac
cmake_minimum_required ( VERSION 2.8 )

if (CMAKE_SYSTEM_NAME STREQUAL Android )
    if ( NOT CMAKE_SYSTEM_PROCESSOR )
        set ( CMAKE_SYSTEM_PROCESSOR    armeabi-v7a )
    endif ()
    if ( NOT CMAKE_SYSTEM_VERSION )
        set ( CMAKE_SYSTEM_VERSION      8 )
    endif ()
    if ( NOT NDK_TOOLCHAIN_VERSION) 
        set ( NDK_TOOLCHAIN_VERSION     4.8 )
    endif ()

    set ( ANDROID_NDK_ROOT $ENV{ANDROID_NDK_ROOT} )

    find_path ( TOOLCHAIN_ROOT bin PATHS ${ANDROID_NDK_ROOT}/toolchains/arm-linux-androideabi-${NDK_TOOLCHAIN_VERSION}/prebuilt/* )

    include ( CMakeForceCompiler )

    find_program ( CMAKE_C_COMPILER   arm-linux-androideabi-gcc PATHS ${TOOLCHAIN_ROOT}/bin )
    find_program ( CMAKE_CXX_COMPILER arm-linux-androideabi-g++ PATHS ${TOOLCHAIN_ROOT}/bin )
    find_program ( CMAKE_AR           arm-linux-androideabi-ar  PATHS ${TOOLCHAIN_ROOT}/bin )

    cmake_force_c_compiler      ( ${CMAKE_C_COMPILER} GNU )
    cmake_force_cxx_compiler    ( ${CMAKE_CXX_COMPILER} GNU )

    set ( CMAKE_SYSROOT         ${ANDROID_NDK_ROOT}/platforms/android-${CMAKE_SYSTEM_VERSION}/arch-arm  CACHE PATH "" )

    set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY )
    set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
    set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )

endif ()

project ( fdk-aac )

if ( NOT INCLUDE_INSTALL_DIR )
    set ( INCLUDE_INSTALL_DIR include )
endif ()

if ( NOT ARCHIVE_INSTALL_DIR )
    set ( ARCHIVE_INSTALL_DIR lib/static )
endif ()

if ( NOT IS_DIRECTORY ${FDK_AAC_SOURCE_DIR} )
    message ( FATAL_ERROR "FDK_AAC_SOURCE_DIR=${FDK_AAC_SOURCE_DIR} is not a dir" )
endif ()

if ( CMAKE_SYSTEM_NAME STREQUAL Android )
    add_definitions (
        --sysroot=${CMAKE_SYSROOT}
        -fPIC
        -march=armv7-a
        -mfpu=vfpv3-d16
        -DANDROID
        -mhard-float
        -D_NDK_MATH_NO_SOFTFP=1
        -lm_hard )
endif ()

add_definitions (
    -fno-rtti
    -fno-exceptions )

set ( SOURCE_FILES )

foreach ( subdir
    libAACdec libAACenc libFDK
    libMpegTPDec libMpegTPEnc
    libPCMutils
    libSBRdec libSBRenc
    libSYS )

    set ( __inc_dir ${FDK_AAC_SOURCE_DIR}/${subdir}/include )

    include_directories ( ${__inc_dir} )
    install ( DIRECTORY ${__inc_dir}/ DESTINATION ${INCLUDE_INSTALL_DIR}/fdk-aac/ )

    file ( GLOB __src_files
        ${FDK_AAC_SOURCE_DIR}/${subdir}/src/*.cpp
        ${FDK_AAC_SOURCE_DIR}/${subdir}/src/*.h )
    list ( APPEND SOURCE_FILES ${__src_files} )
endforeach ()

add_library ( fdk-aac STATIC
    ${SOURCE_FILES} )

install ( TARGETS fdk-aac
    ARCHIVE DESTINATION ${ARCHIVE_INSTALL_DIR} )

 

什么都不需要配置,然后选定目录尽可以直接进行编译。遇到错误的话,直接添加一个FDK_AAC_SOURCE_DIR,目录

就设置为源码根目录。

OK,万事大吉

6  libaacplus, 3GPP released reference implementations 3GPP High Efficiency Advanced Audio Codec (HE-AAC) Codec (3GPP TS 26.410 V 8.0.0).  --只有编码,“Enhanced aacPlus general audio codec; Floating-point ANSI-C code”
 

简要介绍了下各个音频的编解码库,接下来要进行编解码的研究。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值