android 编译faac,faac 移植到android
在项目中需要应用到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相关推荐
- android 短信ril移植,将Android平台的RIL层移植到基于LINUX的通用平台的研究与实现...
摘要:本文通过对Android RIL层代码分析,将android RIL层功能在纯LINUX平台上实现,完全脱离了Android系统.为基于LINUX的通用平台实现一套成熟的RIL层代码,并开发出相 ...
- Android——编译(三):android.bp的相关知识
本文是最后一篇,主要介绍android.bp.:转载自Android 编译之android.bp 作者:qiuxintai 链接:https://www.jianshu.com/p/f69d1c381 ...
- android编译v8引擎,V8引擎 Android库构建
强烈推荐大家在linux系统下构建v8引擎,如果您喜欢折腾,非要使用MAC,可参考这篇文章,可以帮您更快速上手MAC 下 V8 Android编译指墙. Checking out the V8 sou ...
- android 编译时解析xml布局,android – 在xml布局中引用build.gradle versionName属性
根据 http://tools.android.com/tech-docs/new-build-system你可以直接从毕业生创造资源,所以放 android { ... defaultConfig ...
- android编译的tool版本有多少,android gradle tool版本从3.3升级到3.6.3问题记录
本文记录了项目的gradle tools 从3.3.0版本,升级到3.6.3过程中,遇到的问题,以及如何解决. gradle tool升级步骤: 项目根目录的build.gradle,搜索com.an ...
- Android编译源码hook,Hook Android C代码(Cydia Substrate)
本帖最后由 PJ头狼 于 2016-9-26 18:00 编辑 之前对于Cydia Substrate这个框架的使用及如何hook到Android的Java层,是在学习了鬼哥的Hook Android ...
- android 编译报错 xm*,解决Android Studio编译后安装apk报错:The APK file does not exist on disk...
版权声明:本文为[欧阳鹏]原创文章,欢迎转载,转载请注明出处! [http://blog.csdn.net/ouyang_peng] 1.错误描述 今天用Android Studio编译应用后安装AP ...
- 解决Android 编译出错 找不到android.databinding.ViewDataBinding的类文件
报错如下: 错误: 无法访问ViewDataBinding 找不到android.databinding.ViewDataBinding的类文件 有关详细信息, 请参阅以下堆栈跟踪. com.sun. ...
- android编译集成dialer应用,Comet Android Dialer
程序需要调用以下重要权限: 直接拨打电话号码 - 允许程序从非系统拨号器里输入电话号码 发送短信 - 发送短信 读取您的通讯录 - 允许应用访问联系人通讯录信息 读取您的讯息(短信或彩信) - 读取短 ...
- android 原始编译过程,Android编译系统环境初始化过程分析.doc
Android编译系统环境初始化过程分析要点 Android编译系统环境初始化过程分析 Android源代码在编译之前,要先对编译环境进行初始化,其中最主要就是指定编译的类型和目标设备的型号.Andr ...
最新文章
- 【S操作】轻松优雅防止(解决)两次掉进同一坑的完美解决方案
- linux 使用jstack_案例解析:线程池使用不当导致的系统崩溃
- linux充当防火墙,Linux下主机充当防火墙的巧妙应用之iptables!.doc
- 算法:输入一个链表,输出该链表中倒数第k个结点。
- oracle01144,ORA-01144
- 为什么有些人退休后,一下子衰老了很多?
- [USACO4.1]麦香牛块Beef McNuggets By cellur925
- java代理模式与装饰者模式
- 「上云」不是终点,释放数据价值才是数字经济时代的「加油站」
- 智能机器人语音ic丨智能玩具语音识别芯片丨机器人语音播报芯片丨AI语音提示芯片...
- 宏文件下载_技能 | WPS如何启用宏功能,VBA组件安装
- 安装CAD2006出现html,Win7系统安装cad2006出现已终止CAD2006-Simplifieng安装怎么办
- Centos8安装GitLab14.2开源代码托管工具
- vue weex 打电话
- 虚化视频边框,添加滚动字幕的简单教程
- java如何直接打印数组
- 掐头去尾-利用正则表达式的匹配顺序
- android ROM设置默认Launcher(主屏幕应用)
- python同步远程文件夹_python pyinotify 监控远程文件夹来实现即时全量同步
- 初识——雷达通信一体化技术