经过一个多星期的战斗,不同的教程和示例解释了如何运行编译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,它可能是实现我的目标的重要部分,但老实说,我不明白这个文件中设置的一些行.或者只是我不知道如何使事情发挥作用.
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODulE := ffmpeg-prebuiltLOCAL_SRC_fileS := ffmpeg-build/$(TARGET_ARCH_ABI)/libffmpeg.soLOCAL_EXPORT_C_INCLUDES := ffmpeg-build/$(TARGET_ARCH_ABI)/includeLOCAL_EXPORT_LDliBS := ffmpeg-build/$(TARGET_ARCH_ABI)/libffmpeg.soLOCAL_PRElink_MODulE := trueinclude $(PREBUILT_SHARED_liBRARY)include $(CLEAR_VARS)LOCAL_ALLOW_UNdefineD_SYMBolS=trueLOCAL_MODulE := hello-jniLOCAL_SRC_fileS := hello-jni.cLOCAL_C_INCLUDES := $(LOCAL_PATH)/ffmpeg-build/$(TARGET_ARCH_ABI)/includeLOCAL_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最简单的方法我不知道ffmpeg的API我希望有可能以这种方式运行ffmpeg:
Can FFmpeg be used as a library,instead of a standalone program?
总而言之,我认为我的问题完全是由于完全缺乏c / c知识,特别是如何使用.so库中运行任何函数.
我希望有一个人可以帮助我 :).
解决方法 https://github.com/halfninja/android-ffmpeg-x264/blob/master/Project/jni/videokit/uk_co_halfninja_videokit_Videokit.c查看上面链接中的“JNI_Call …”.这是如何从androID调用’ffmpeg.main()’的包装器.
https://github.com/halfninja/android-ffmpeg-x264/blob/master/Project/jni/videokit/ffmpeg.c
使用上面的链接并在最后找到’main()’.这是ffmpeg.c版本略有改动的例子(logger改为java / androID ndk).
如果您研究这些示例,如果要使用它,您应该感觉如何在其他项目中包装ffmpeg.main().记录器问题在这一点上没有实际意义,因此git上更现代的[androID-ffmpeg]项目可以使ffmpeg.c开箱即用并与JNI一起使用.您可能仍需要更改的唯一事情是main()最后的’exit()’.
总结以上是内存溢出为你收集整理的在android中运行ffmpeg作为库全部内容,希望文章能够帮你解决在android中运行ffmpeg作为库所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)