我有一個簡單的任務來完成。我需要在Android環境中使用ffmpeg將一組圖片合併到視頻中。運行的ffmpeg作爲圖書館在android系統
了一個多星期的戰鬥與不同的教程和例子,說明如何運行編譯ffmpeg的我後,讓我們說,中取得成功。我終於編譯了android的ffmpeg。
我跟着這個例子: https://github.com/appunite/AndroidFFmpeg 哪個最適合我。
作爲建設FFmpeg的一個具有以下目錄結構的結果:
[Project]/jni/ffmpeg-build/armeabi-v7a/libffmpeg.so
[Project]/jni/ffmpeg-build/armeabi/libffmpeg.so
[Project]/jni/ffmpeg-build/mips/libffmpeg.so
[Project]/jni/ffmpeg-build/x86/libffmpeg.so
我也跟着NDK的例子,所以我已經從Java運行的C代碼:
#include <string.h>
#include <jni.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>
#include <android/log.h>
#include <stdlib.h>
#include <stdbool.h>
bool initted = false;
static JavaVM *sVm;
jstring Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env, jobject thiz) {
char **argv;
char *cmd;
int argc;
// cmd = "ffmpeg -version";
// argv = parsedargs(cmd, &argc);
// ffmpeg(argc, argv);
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
我的問題是如何從我的「hello-jni」c文件運行函數ffmpeg。我讀過我需要寫一個ffmpeg的包裝器,這是我的hello-jni的意圖。
這裏是我的Android.mk這可能是importat部分實現我的目標,但老實說,我有些不明白,行此文件中設置。或者只是我不知道如何使事情發揮作用。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg-prebuilt
LOCAL_SRC_FILES := ffmpeg-build/$(TARGET_ARCH_ABI)/libffmpeg.so
LOCAL_EXPORT_C_INCLUDES := ffmpeg-build/$(TARGET_ARCH_ABI)/include
LOCAL_EXPORT_LDLIBS := ffmpeg-build/$(TARGET_ARCH_ABI)/libffmpeg.so
LOCAL_PRELINK_MODULE := true
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_ALLOW_UNDEFINED_SYMBOLS=true
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/ffmpeg-build/$(TARGET_ARCH_ABI)/include
LOCAL_SHARED_LIBRARY := ffmpeg-prebuilt
#LOCAL_CFLAGS += -g -Iffmpeg-prebuilt -Ihello-jni -Wno-deprecated-declarations
#LOCAL_LDLIBS += -llog -lz -landroid ffmpeg-build/$(TARGET_ARCH_ABI)/libffmpeg.so
include $(BUILD_SHARED_LIBRARY)
還有一件事。我已經找到了一個如何包裝ffmpeg的主要功能的例子。這將會是使用的ffmpeg我sinse我不知道的ffmpeg的API,我希望它可以運行的ffmpeg這種方式最簡單的方法: Can FFmpeg be used as a library, instead of a standalone program?
綜上所述,我想我的問題是由於完全缺乏的c/C++知識,尤其是如何使用.so庫運行任何函數。
我希望有人能幫助我:)。
你可以嘗試在[JavaCV(http://code.google.com/p/javacv/)捆綁在一起的二進制文件。還有關於如何構建它們的說明。 – 2013-03-09 01:52:30