在android中运行ffmpeg作为库

在android中运行ffmpeg作为库,第1张

概述我有一个简单的任务要做.我需要使用在 android环境中工作的ffmpeg将一组图片合并到一个视频中. 经过一个多星期的战斗,不同的教程和示例解释了如何运行编译ffmpeg,我说,中间成功.我终于为android编译了ffmpeg. 我按照这个例子: https://github.com/appunite/AndroidFFmpeg 这对我来说效果最好. 由于构建ffmpeg,因此具有以下目录结 我有一个简单的任务要做.我需要使用在 android环境中工作的ffmpeg将一组图片合并到一个视频中.

经过一个多星期的战斗,不同的教程和示例解释了如何运行编译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作为库所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1135330.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存