android NDK for my android application。我被困在起跑线上并没有进一步编译。以下是我的代码。它不能在“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;}
答案 0 :(得分:1)
为什么要使用jbyte?你有没有尝试过
const char * str =(*env)->GetStringUTFChars(env, filename, NULL);
呢?
编辑: 如果您确定文件名不为null,则问题可能来自它下面的av_open_input_file函数调用。 FFmpeg使用文件协议打开输入文件,这意味着您需要使文件名看起来像这样“file:///.../test.mp4”
希望这有帮助。答案 1 :(得分:1)
这是正确的语法:
const char *str;
str = (*env)->GetStringUTFChars(env, filename, NULL);
此外,您似乎正在尝试开发我已经为其创建解决方案的内容。查看FFmpegMediaMetadataRetriever。