1

用于我的 android 应用程序的 android NDK。我被困在起跑线上,它没有进一步编译。以下是我的代码。它在“str = (*env)->GetStringUTFChars(env, filename, NULL);”之后不编译 . 请检查我的 java 和 c 代码

的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;}
4

2 回答 2

1

这是正确的语法:

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

此外,您似乎正在尝试开发我已经为其创建解决方案的东西。查看FFmpegMediaMetadataRetriever

于 2013-04-08T04:00:09.383 回答
1

为什么要使用jbyte?你试过 const char * str =(*env)->GetStringUTFChars(env, filename, NULL); 了吗?

编辑:如果您确定文件名不为空,则问题可能来自它下面的 av_open_input_file 函数调用。FFmpeg 使用文件协议打开输入文件,这意味着你需要使文件名看起来像这样“file:///.../test.mp4”

希望这有帮助。

于 2013-04-05T11:27:25.157 回答