Läuft ffmpeg-Bibliothek in android

Habe ich eine einfache Aufgabe zu tun. Ich Abmischen, Gruppe von Bildern in ein video mit ffmpeg arbeiten in der android-Umgebung.

Nach über einer Woche kämpfen mit verschiedenen tutorials und Beispiele, die erklären, wie Sie ausführen, kompilieren von ffmpeg habe ich, sagen wir mal, mittleren Erfolg. Ich habe es endlich kompilierte ffmpeg für android.

Ich diesem Beispiel gefolgt:
https://github.com/appunite/AndroidFFmpeg
das klappte für mich am besten.

Als Ergebnis der Gebäude-ffmpeg habe folgende Verzeichnisstruktur:

[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

Ich folgte auch das ndk Beispiele, so habe ich ausgeführt-c-code aus 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 !");

}

Meine Frage ist, wie run-Funktion von ffmpeg aus meinem "hello-jni" c-Datei. Ich habe gelesen, ich brauche zum schreiben eine wrapper über ffmpeg die meine hello-jni soll.

Hier ist mein Android.mk was wahrscheinlich ist importat Teil, um mein Ziel erreichen, aber ehrlich gesagt, ich verstehe nicht, einige Zeilen in dieser Datei. Oder einfach nur ich weiß nicht, wie die Dinge funktionieren.

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)

Eine weitere Sache. Habe ich ein Beispiel wie wrap ffmpeg main-Funktion. Es wäre der einfachste Weg, verwenden Sie ffmpeg für mich sinse ich weiß nicht, ffmpeg-api und ich hoffe, es ist möglich, dass ffmpeg auf diese Weise:
Kann FFmpeg verwendet werden, wie eine Bibliothek, statt ein eigenständiges Programm?

Zusammenfassend, ich denke, meine Probleme sind aufgrund der völlig Mangel an c/c++ - Kenntnisse, insbesondere wie zu verwenden führen Sie keine Funktion aus .also-Bibliothek.

Ich hoffe jemand kann mir helfen :).

  • Sie könnten versuchen, die Binärdateien gebündelt in JavaCV. Es gibt auch Anweisungen, wie Sie zu bauen.
  • was zum anhalten/Abbrechen die Ausführung? kennst du eine Lösung wie Stoppt FFmpeg, nachdem Sie namens ffmpeg main-Funktion?
InformationsquelleAutor szakal | 2013-02-25
Schreibe einen Kommentar