您的位置:首页 > 移动开发 > Android开发

android ktv 开发过程5-android调用ffmpeg成功

2016-02-29 23:41 579 查看
上贴虽然失败,但是也有收获。

上贴失败的原因是和ndk自己带的例子有关。备受折磨后,决定重新写个Ndk的程序。

用eclipse新建一个android工程,其实不是android工程也可以。

代码如下:

package com.sun;

import android.app.Activity;
import android.os.Bundle;

public class JNITest extends Activity {
public native int version();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
int x=version();
android.util.Log.d("version:",String.valueOf(x));
}
static {
System.loadLibrary("ffmpeg");
System.loadLibrary("jnitest");
}
}


然后在工程的根目录下建个文件夹jni/,然后将ffmpeg的源代码copy到jni目录下,注意此处的源代码是经过前面编译ffmpeg时修剪完的源代码。然后新建一个Android.mk文件,文件内容为:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE    := jnitest
LOCAL_SRC_FILES := ffmpegtest.c
LOCAL_C_INCLUDES += $(LOCAL_PATH)/ffmpeg/ $(LOCAL_PATH)/ffmpeg/libavutil/ $(LOCAL_PATH)/ffmpeg/libavcodec/ $(LOCAL_PATH)/ffmpeg/libavformat/ $(LOCAL_PATH)/ffmpeg/libavcodec/ $(LOCAL_PATH)/ffmpeg/libswscale/
LOCAL_LDLIBS +=-lffmpeg
include $(BUILD_SHARED_LIBRARY)


再在jni目录下建一个ffmpegtest.c文件。(注:.c文件的代码可以参考别的代码直接写,也可以先写出JAVA文件,然后用javah生成.h文件,然后再改写成.c文件,只保留.c问价即可)文件内容为:

#include <jni.h>
#include <stdio.h>
JNIEXPORT jint JNICALL Java_com_sun_JNITest_version
(JNIEnv *evn, jobject obj)
{
return (int)avcodec_version();
}


然后使用nkd命令编译:

./ndk-build -C /home/s_jrvin/workspace/jnitest

在工程根目录下的Libs\armeabi\下生成了libjnitest.so。成功。。呵呵。。

然后把libffmpeg.so 拷到工程根目录下的Libs\armeabi\下。

运行 android程序,成功打印log信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: