使用androidNDK中的FFmpeg库播放视频

问题描述 投票:1回答:1

我拥有播放视频所需的所有.so库和头文件。我想从Raw文件夹播放视频。我对CPP代码感到震惊。无法将视频文件路径传递到CPP代码。以下是我的native-lib.cpp代码

 const char *file = env->GetStringUTFChars(path, 0);
if (file == NULL) {
    printf("The file is a null object.");
}

av_register_all();
int ret = 0;
char errbuf[256];
AVFormatContext *fmt_ctx = avformat_alloc_context();
int ret12 = avformat_open_input(&fmt_ctx, file, NULL, NULL);
if (ret12 < 0) {
    av_strerror(ret, errbuf, sizeof(errbuf));
    __android_log_print(ANDROID_LOG_ERROR, "ffmpeg", "%s", errbuf);
    __android_log_print(ANDROID_LOG_ERROR, "ffmpeg", "%i", ret12);
    return;
}

上面的ret12返回-ve值并且正在将控件返回

android kotlin ffmpeg android-ndk android-ffmpeg
1个回答
0
投票

不完全是您现在面临的问题,但是当您使用GetStringUTFChars()时,必须先调用ReleaseStringUTFChars(),然后再从本机方法返回Java。

现在,当您将文件路径传递给JNI时,它是完整路径还是相对路径?在Android应用中,“当前目录”的开头是/,即根目录。因此,可能是您的代码找不到该文件。

下一个问题是,您的应用程序是否具有足够的权限来打开此文件。如果文件位于应用程序专用文件夹之外的外部存储中,则需要运行时READ_EXTERNAL_STORAGE权限才能读取该文件。此外,在Android 10上还有其他限制。您的应用程序AndroidManifest.xml中可能需要android:requestLegacyExternalStorage="true"属性。

© www.soinside.com 2019 - 2024. All rights reserved.