在项目中需要应用到faac 压缩音频传输,有网友提供了移植方法和库.so 测试了声音不对,所以参考了他的移植方法 封装的接口。

可以在资源下载自己修改http://download.csdn.net/detail/undiif123/5494433

jint

Java_com_sinaapp_bashell_AacEncoder_AACEncoderOpen(JNIEnv* env,

jobject this,jint sampleRate,jint channels)

{

faacEncConfigurationPtr myFormat;

unsigned int mpegVersion = MPEG4;

unsigned int objectType = LOW;

unsigned int useMidSide = 1;

unsigned long quantqual = 100;

static unsigned int useTns = 1;

int rawBits = 16;

int rawRate =sampleRate;

int rawEndian = 1;

int shortctl = SHORTCTL_NORMAL;

g_hEncoder = faacEncOpen(sampleRate, channels,

&samplesInput, &maxOutputBytes);

myFormat = faacEncGetCurrentConfiguration(g_hEncoder);

myFormat->allowMidside = useMidSide;

myFormat->aacObjectType = objectType;

myFormat->mpegVersion = mpegVersion;

myFormat->outputFormat =1;

myFormat->useTns = useTns;

myFormat->useLfe = 0;

myFormat->quantqual =quantqual;

myFormat->bandWidth = 0;

myFormat->shortctl = shortctl;

faacEncSetConfiguration(g_hEncoder, myFormat);

sprintf(g_szFileName,"/storage/sdcard0/new_test1.aac");//"/mnt/sdcard/new.aac");///data/IPVOD/

// sprintf(g_szFileName,"/storage/sdcard0/new_test1.pcm");//"/mnt/sdcard/new.aac");///data/IPVOD/

LOGI("samplesInput:%d,maxOutputBytes:%d",samplesInput,maxOutputBytes);

g_OutFile = fopen(g_szFileName, "wb");

if(g_OutFile == NULL) {LOGI("open aacfile failed!"); return 1;};

sprintf(g_szFileName,"/storage/sdcard0/new_test0.pcm");//"/mnt/sdcard/new.aac");///data/IPVOD/

g_OutFile0 = fopen(g_szFileName, "wb");

if(g_OutFile0 == NULL) {LOGI("open aacfile failed!"); return 1;};

return 1;

}

jint

Java_com_sinaapp_bashell_AacEncoder_AacWrite(JNIEnv* env,jobject this,jbyteArray jBuffer, jint jBufferSize) {

int *pcmbuf;

unsigned char *bitbuf;

jbyte* bBuffer = (*env)->GetByteArrayElements(env,jBuffer,0);

pcmbuf = (short*)malloc(samplesInput*sizeof(int));

bitbuf = (unsigned char*)malloc(maxOutputBytes*sizeof(unsigned char));

unsigned int bytesWritten;

if(g_hEncoder != NULL) {

unsigned int nBufferSize = (unsigned int)jBufferSize/2;

int nByteCount=0;

unsigned short* buf=(unsigned short*)bBuffer;

fwrite(jBuffer, 1, jBufferSize, g_OutFile0);

while(nByteCount < nBufferSize)

{

int audioLength=samplesInput;

if((nByteCount+samplesInput) >= nBufferSize) {

audioLength=nBufferSize-nByteCount;

}

int i;

for (i = 0; i < audioLength; i++)

{

int s = ((int16_t *)buf+nByteCount)[i];

pcmbuf[i] = s << 8;

}

nByteCount+=samplesInput;

bytesWritten = faacEncEncode(g_hEncoder,

pcmbuf,

audioLength,

bitbuf,

maxOutputBytes);

if (bytesWritten < 0)continue;

fwrite(bitbuf, 1, bytesWritten, g_OutFile);

}

}

if(bitbuf) free(bitbuf);

if(pcmbuf) free(pcmbuf);

return 1;

}

/*

jint

Java_com_sinaapp_bashell_AacEncoder_AACEncoderEncode(JNIEnv* env,

jobject this,jint hEncoder, jbyteArray inputBuffer, jint inputBufferSize)

{

int *pcmbuf;

unsigned char *bitbuf;

jbyte* bBuffer = (*env)->GetByteArrayElements(env,inputBuffer,0);

jsize jLen = (*env)->GetArrayLength(env,inputBuffer);

int bytesInput = (int)jLen;

pcmbuf = (short*)malloc(samplesInput*sizeof(int));

bitbuf = (unsigned char*)malloc(maxOutputBytes*sizeof(unsigned char));

unsigned int bytesWritten;

if(g_hEncoder != NULL) {

unsigned int nBufferSize = (unsigned int)inputBufferSize/2;

int nByteCount=0;

unsigned short* buf=(unsigned short*)bBuffer;

fwrite(bBuffer, 1, inputBufferSize, g_OutFile0);

while(nByteCount < nBufferSize)

{

int audioLength

jint

Java_com_sinaapp_bashell_AacEncoder_AACEncoderClose(JNIEnv* env,jobject this)

{

if(g_hEncoder != NULL) {

faacEncClose(g_hEncoder);

}

if(g_OutFile)fclose(g_OutFile);

return 1;

}

android 编译faac,faac 移植到android相关推荐

  1. android 短信ril移植,将Android平台的RIL层移植到基于LINUX的通用平台的研究与实现...

    摘要:本文通过对Android RIL层代码分析,将android RIL层功能在纯LINUX平台上实现,完全脱离了Android系统.为基于LINUX的通用平台实现一套成熟的RIL层代码,并开发出相 ...

  2. Android——编译(三):android.bp的相关知识

    本文是最后一篇,主要介绍android.bp.:转载自Android 编译之android.bp 作者:qiuxintai 链接:https://www.jianshu.com/p/f69d1c381 ...

  3. android编译v8引擎,V8引擎 Android库构建

    强烈推荐大家在linux系统下构建v8引擎,如果您喜欢折腾,非要使用MAC,可参考这篇文章,可以帮您更快速上手MAC 下 V8 Android编译指墙. Checking out the V8 sou ...

  4. android 编译时解析xml布局,android – 在xml布局中引用build.gradle versionName属性

    根据 http://tools.android.com/tech-docs/new-build-system你可以直接从毕业生创造资源,所以放 android { ... defaultConfig ...

  5. android编译的tool版本有多少,android gradle tool版本从3.3升级到3.6.3问题记录

    本文记录了项目的gradle tools 从3.3.0版本,升级到3.6.3过程中,遇到的问题,以及如何解决. gradle tool升级步骤: 项目根目录的build.gradle,搜索com.an ...

  6. Android编译源码hook,Hook Android C代码(Cydia Substrate)

    本帖最后由 PJ头狼 于 2016-9-26 18:00 编辑 之前对于Cydia Substrate这个框架的使用及如何hook到Android的Java层,是在学习了鬼哥的Hook Android ...

  7. android 编译报错 xm*,解决Android Studio编译后安装apk报错:The APK file does not exist on disk...

    版权声明:本文为[欧阳鹏]原创文章,欢迎转载,转载请注明出处! [http://blog.csdn.net/ouyang_peng] 1.错误描述 今天用Android Studio编译应用后安装AP ...

  8. 解决Android 编译出错 找不到android.databinding.ViewDataBinding的类文件

    报错如下: 错误: 无法访问ViewDataBinding 找不到android.databinding.ViewDataBinding的类文件 有关详细信息, 请参阅以下堆栈跟踪. com.sun. ...

  9. android编译集成dialer应用,Comet Android Dialer

    程序需要调用以下重要权限: 直接拨打电话号码 - 允许程序从非系统拨号器里输入电话号码 发送短信 - 发送短信 读取您的通讯录 - 允许应用访问联系人通讯录信息 读取您的讯息(短信或彩信) - 读取短 ...

  10. android 原始编译过程,Android编译系统环境初始化过程分析.doc

    Android编译系统环境初始化过程分析要点 Android编译系统环境初始化过程分析 Android源代码在编译之前,要先对编译环境进行初始化,其中最主要就是指定编译的类型和目标设备的型号.Andr ...

最新文章

  1. 【S操作】轻松优雅防止(解决)两次掉进同一坑的完美解决方案
  2. linux 使用jstack_案例解析:线程池使用不当导致的系统崩溃
  3. linux充当防火墙,Linux下主机充当防火墙的巧妙应用之iptables!.doc
  4. 算法:输入一个链表,输出该链表中倒数第k个结点。
  5. oracle01144,ORA-01144
  6. 为什么有些人退休后,一下子衰老了很多?
  7. [USACO4.1]麦香牛块Beef McNuggets By cellur925
  8. java代理模式与装饰者模式
  9. 「上云」不是终点,释放数据价值才是数字经济时代的「加油站」
  10. 智能机器人语音ic丨智能玩具语音识别芯片丨机器人语音播报芯片丨AI语音提示芯片...
  11. 宏文件下载_技能 | WPS如何启用宏功能,VBA组件安装
  12. 安装CAD2006出现html,Win7系统安装cad2006出现已终止CAD2006-Simplifieng安装怎么办
  13. Centos8安装GitLab14.2开源代码托管工具
  14. vue weex 打电话
  15. 虚化视频边框,添加滚动字幕的简单教程
  16. java如何直接打印数组
  17. 掐头去尾-利用正则表达式的匹配顺序
  18. android ROM设置默认Launcher(主屏幕应用)
  19. python同步远程文件夹_python pyinotify 监控远程文件夹来实现即时全量同步
  20. 初识——雷达通信一体化技术

热门文章

  1. 【转载】Weka入门教程
  2. 深度优先搜索——单词方阵(洛谷 P1101)
  3. c扩展php 对象,PHP扩展开发之面向对象
  4. openGauss Summit 2021云和恩墨分论坛即将开启
  5. “我的国产数据库之路”征文活动——专访优秀作者彭冲
  6. PostgreSQL 12 的同步流复制搭建及主库hang问题处理与分析
  7. stm32串口空闲中断接收不定长数据
  8. 亿级数据量场景下,如何优化数据库分页查询方法?
  9. 【华为云技术分享】数据湖数据库,别再傻傻分不清了
  10. 本科阶段就挑战自动驾驶开发?华为云ModelArts帮你轻松实现!