我已经编译了FFmpeg
库,NDK
并使用它来修剪视频并从我的应用程序中的视频中获取缩略图,所以基本上我已经启动ffmpeg.so
并video-trimmer.so
运行了库。
然而问题很奇怪,trim 或 getThumbnail 操作成功但只有一次,即第一次,第二次操作失败。但是第三次成功了,我用谷歌搜索了两个与我的问题相关的类似帖子
有趣的是,他们提出了相同的解决方案,而我无法解决C
编程语言幼稚的问题。
这是我所做的
void Java_com_example_demo_natives_LibraryLoader_loadTrimmerLibrary(JNIEnv* env, jclass class, jstring libffmpeg_path, jstring inputFile, jstring outFile,
jstring startTime, jstring length)
{
const char* path;
void* handle;
int *(*Java_com_example_demo_natives_VideoTrimmer_trim)(JNIEnv *, jclass, jstring, jstring, jstring, jstring);
path = (*env)->GetStringUTFChars(env, libffmpeg_path, 0);
handle = dlopen(path, RTLD_LAZY);
Java_com_example_demo_natives_VideoTrimmer_trim = dlsym(handle, "Java_com_example_demo_natives_VideoTrimmer_trim");
(*Java_com_example_demo_natives_VideoTrimmer_trim)(env, class, inputFile, outFile, startTime, length);
(*env)->ReleaseStringUTFChars(env, libffmpeg_path, path);
dlclose(handle);
}
尽管调用dlclose
库实例仍然存在于内存中,但我在这里做错了什么?
我知道库实例仍然存在,因为当我在其他活动中再次加载库时,错误消息显示库已经存在于 CL 中。
我想从内存中删除该库的实例,请帮助...