2013-04-05 82 views
1

android NDK for android應用程序。我被困在起跑線上,並沒有進一步編譯。以下是我的代碼。它不會在「str =(* env) - > GetStringUTFChars(env,filename,NULL);」。請檢查我的Java和C代碼從GetStringUTFChars創建沒有結果JNI

Java代碼:

public class MyffmpegActivity extends Activity { 

private static native int logFileInfo(String filename); 

static 
{ 
    Log.i("HEHA", "HOHA"); 
    System.loadLibrary("mylib"); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_myffmpeg); 
    String path=Environment.getExternalStorageDirectory().getPath(); 
    path=path+"/test.mp4"; 
    Log.i("Name Returned is ", ":"+path); 
int x=logFileInfo(path); 


} 

C代碼

jint Java_com_example_myffmpegtest_MyffmpegActivity_logFileInfo(JNIEnv * env, jobject this, jstring filename) 
{ 

av_register_all(); 
    AVFormatContext *pFormatCtx; 
    const jbyte *str; 

    str = (*env)->GetStringUTFChars(env, filename, NULL); 
if(av_open_input_file(&pFormatCtx, str, NULL, 0, NULL)!=0) 
{ 
    LOGE("Can't open file '%s'\n", str); 
    return 1; 
} 
else 
{ 

    LOGI("File was opened\n"); 
    LOGI("File '%s', Codec %s", 
     pFormatCtx->filename, 
     pFormatCtx->iformat->name 
    ); 
} 
return 0;} 

回答

1

爲什麼要使用jbyte?你有沒有試過 const char * str =(*env)->GetStringUTFChars(env, filename, NULL);呢?

編輯: 如果你確定文件名不爲空,問題可能來自它下面的av_open_input_file函數調用。 FFmpeg使用文件協議打開輸入文件,這意味着你需要使文件名看起來像這樣「file:///.../test.mp4」

希望這可以幫到你。

+0

是的,我已經嘗試過。仍然不能正常工作 – 2013-04-06 07:39:57

1

下面是正確的語法:

const char *str; 
str = (*env)->GetStringUTFChars(env, filename, NULL); 

此外,它看起來就像你正在試圖開發的東西我已經創建了一個解決方案。檢出FFmpegMediaMetadataRetriever

+0

對不起,沒有語法問題,但在Android.mk文件中出現了一些錯誤 – 2013-04-09 11:26:30