我有一个简单的任务要做.我需要使用在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
Run Code Online (Sandbox Code Playgroud)
我也遵循了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 !");
}
Run Code Online (Sandbox Code Playgroud)
我的问题是如何从我的"hello-jni"c文件中运行ffmpeg中的函数.我已经读过了我需要在ffmpeg上写一个包装器,我的hello-jni就是这个包装器.
这是我的Android.mk,它可能是实现我的目标的重要部分,但老实说,我不明白这个文件中设置的一些行.或者只是我不知道如何让事情发挥作用.
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg-prebuilt
LOCAL_SRC_FILES …Run Code Online (Sandbox Code Playgroud) 让我们考虑以下测试:
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class ExampleTest {
static {
System.out.println("hello from static");
}
@BeforeAll
static void beforeAll() {
System.out.println("before all!");
}
@Test
void contextLoads() {
System.out.println("hello!");
}
}
Run Code Online (Sandbox Code Playgroud)
我希望类加载器首先加载类并调用静态函数。然后该对象被实例化并加载 spring-boot 上下文。
已声明,我在日志中看到:
...
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) …Run Code Online (Sandbox Code Playgroud)