我需要拍攝圖片文件和音頻文件並創建視頻。 我知道,它可能與FFmpeg:調用Runnable時java.lang.UnsatisfiedLinkError類
Runtime.getRuntime().exec("ffmpeg -i image.jpeg -i audio.mp3 out.avi")
但只幫助了紮根設備做的,所以我試圖從ffmpeg.c創建主JNI包裝(),並從我的活動稱呼它在這裏:http://demo860.blogspot.com/2010/07/android-ffmpeg-dynamic-module-jni.html
1.本代碼是在ffmpeg.c:
int m_argc = 0;
char *m_pargv [30];
int dynamic_ffpmeg_main (int argc, char **argv);
jint JNICALL Java_com_ccmedia_codec_ffmpeg_mod_1run (JNIEnv *, jclass, jstring, jstring);
jint JNICALL Java_com_ccmedia_codec_ffmpeg_mod_1run (JNIEnv *env, jclass class, jstring pj1, jstring pj2)
{
// as in http://demo860.blogspot.com/2010/07/android-ffmpeg-dynamic-module-jni.html
}
int dynamic_ffpmeg_main(int argc, char **argv)
{
// as in http://demo860.blogspot.com/2010/07/android-ffmpeg-dynamic-module-jni.html
}
int main(int argc, char **argv)
{
dynamic_ffpmeg_main (argc, argv);
return 0;
}
2,本代碼是在我的.java:
public class FFmpegCreator implements Runnable {
static boolean m_bret = false;
static String m_szconfig = " -i /sdcard/file.mpg -vcodec mpeg4 aaa.mpg";
//public native String unimplementedStringFromJNI();
static {
try {
System.out.println("[AdDBCache] Module load try ffmpeg : "
+ System.getProperty("java.library.path"));
// System.load("/sdcard/arm_and/bin/libffmpeg.so");
System.loadLibrary("ffmpeg");
System.out.println("[AdDBCache] Module load success");
}
catch (Exception e) {
System.out.println("[AdDBCache] Module load err : "
+ System.getProperty("java.library.path"));
}
}
private static synchronized final native int Java_com_ccmedia_codec_ffmpeg_mod_1run(String name, String sztoken);
public void set_config(String sz_config) {
m_szconfig = sz_config;
}
public void run_core(String sz_file, String sz_token) {
int n_stat;
m_bret = false;
n_stat = Java_com_ccmedia_codec_ffmpeg_mod_1run(m_szconfig, sz_token);
m_bret = true;
}
public void run() {
run_core("", "");
}
}
3.And這在我的活動:
FFmpegCreator f = new FFmpegCreator();
new Thread(f).start();
但我有
E/AndroidRuntime(25682): java.lang.UnsatisfiedLinkError: Java_com_ccmedia_codec_ffmpeg_mod_1run .
而且我不明白爲什麼... FFmpeg的構建成功... 誰能幫我, 請?如果你能幫助我,我會非常感激。謝謝。
非常感謝你的回覆。我按你所說的完成了。給出了一個正常的名字,生成.h,但我仍然有相同的錯誤。 – 2013-03-13 07:04:04
你更新了你的'ffmeg.c'來使用你在生成的.h文件中看到的簽名嗎?使用javah生成.h文件只是爲了向您說明此方法的簽名需要在C端,您仍需要更新C代碼才能使用該簽名。 – 2013-03-13 07:29:55
是的,我did.I得到JNIEXPORT jint JNICALL java_com_appunite_ffmpeg_FFmpegCreator_mod_1run (JNIEnv *,jclass,jstring,jstring);並用.j替換JNICALL java_com_appunite_ffmpeg_FFmpegCreator_mod_1run (JNIEnv *,jclass,jstring,jstring) – 2013-03-13 07:45:48