L'exécution de ffmpeg, de la bibliothèque dans android

J'ai une tâche simple à faire. J'ai besoin de fusionner ensemble d'images en une vidéo à l'aide de ffmpeg de travail dans l'environnement android.

Après plus d'une semaine de combats avec les différents tutoriels et des exemples expliquant comment exécuter compiler ffmpeg, j'ai, disons, moyen de succès. J'ai enfin compilé ffmpeg pour android.

J'ai suivi cet exemple:
https://github.com/appunite/AndroidFFmpeg
ce qui fonctionne le mieux pour moi.

La suite de la construction de ffmpeg ont un structure de répertoire suivante:

[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

J'ai également suivi le ndk exemples donc, j'ai l'exécution de code c à partir de java:

#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 !");

}

Ma question est comment faire pour exécuter la fonction de ffmpeg de mon "bonjour-jni" c-fichier. Je l'ai lu, j'ai besoin d'écrire un wrapper sur ffmpeg qui à mon salut-jni est destiné à être.

Voici mon Android.mk, ce qui est probablement importation de la partie pour atteindre mon objectif, mais honnêtement, je ne comprends pas certaines lignes définies dans ce fichier. Ou tout simplement je ne sais pas comment faire fonctionner les choses.

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)

Une chose de plus. J'ai trouvé un exemple sur la façon d'envelopper ffmpeg fonction principale. Ce serait le moyen le plus facile à utiliser ffmpeg pour moi, matures, je ne sais pas ffmpeg api et j'espère que c'est possible d'exécuter ffmpeg de cette façon:
Peut FFmpeg être utilisé comme une bibliothèque, au lieu d'un programme autonome?

Pour résumer, je pense que mes problèmes sont dus au manque complètement de c/c++ connaissances à tous, en particulier comment utiliser exécuter n'importe quelle fonction .si la bibliothèque.

J'espère que quelqu'un pourra m'aider :).

Vous pouvez essayer de les binaires inclus dans JavaCV. Il y a aussi des instructions sur la façon de les construire.
ce sur arrêt/annulation de l'exécution? connaissez-vous une solution comment arrêter FFmpeg après avoir appelé ffmpeg fonction principale?

OriginalL'auteur szakal | 2013-02-25