弄了半天的ffmpeg.so不能白弄啊,先不管具体流程,先google之 尝试调用动态库中的函数avformat_version()
先jni操作起来, 创建android工程,然后建个Jni.java专门放置调用方法
package com.lz.myFFmpeg.commffmpeg;
public class Jni {
static {
System.loadLibrary("ffmpeg");
System.loadLibrary("myFFmpeg");
System.out.println("loadLibrary myFFmpeg & ffmpeg");
}
public static native int getFFmpegVersion();
}
然后cygwin cd到工程bin下 执行 javah com.lz.myFFmpeg.commffmpeg.Jni 生成com_lz_myFFmpeg_commffmpeg_Jni.h 注意: 首先要生成了Jni.class文件了
放到 ffmpeg源码工程的jni下面
创建 com_lz_myFFmpeg_commffmpeg_Jni.c
代码
#include "com_lz_myFFmpeg_commffmpeg_Jni.h"
#include "../libavformat/Avformat.h"
JNIEXPORT jint JNICALL Java_com_lz_myFFmpeg_commffmpeg_Jni_getFFmpegVersion
(JNIEnv *env, jclass object)
{
return avformat_version();
}
写Android.mk文件 替换之前编译ffmpeg的Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := myffmpeg/com_lz_myFFmpeg_commffmpeg_Jni.c
LOCAL_LDLIBS +=-lffmpeg
LOCAL_LDLIBS +=-llog
LOCAL_MODULE := myFFmpeg
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/myffmpeg \
$(LOCAL_PATH)/libavformat \
include $(BUILD_SHARED_LIBRARY)
再将libffmpeg.so放到 ndk环境下的lib文件夹中 我的是D:\android-ndk-r6b\platforms\android-5\arch-arm\usr\lib ,
注意里面有android-4 android-5 android-8很多个这样的版本,弄不清楚哪个的话每个里面都放个libffmpeg.so
然后执行ndk-build libmyFFmpeg.so 顺利生成
工程目录下创建libs/armeabi文件夹 将之前生成的libffmpeg.so ,libmyFFmpeg.so放到里面 。
ok 执行工程
输出
07-05 14:25:55.580: INFO/System.out(30511): loadLibrary myFFmpeg & ffmpeg
07-05 14:25:55.580: INFO/System.out(30511): version is 3540580
第一步顺利完成。 接下来要研究怎么玩ffmpeg了 O(∩_∩)O ~