Я пытаюсь использовать Android NDKMediaExtractor
в коде C ++, например:
const char *storageFile = "/storage/emulated/0/mytestfile.mp3";
AMediaExtractor *extractor = AMediaExtractor_new();
media_status_t amresult = AMediaExtractor_setDataSource(extractor, storageFile);
Это не с сообщением об ошибке E/NdkMediaExtractor: setDataSource(path) must be called from Java thread
.
Поиск в Интернете не принес мне никакого подсказывает, как я могу решить эту проблему, хотя я нашел исходный код, но ответственная часть выглядит следующим образом:
EXPORT
media_status_t AMediaExtractor_setDataSource(AMediaExtractor *mData, const char *location) {
ALOGV("setDataSource(%s)", location);
// TODO: add header support
JNIEnv *env = AndroidRuntime::getJNIEnv();
jobject service = NULL;
if (env == NULL) {
ALOGE("setDataSource(path) must be called from Java thread");
env->ExceptionClear();
return AMEDIA_ERROR_UNSUPPORTED;
}
// rest of method omitted for brevity
}
Я сдаю JNIEnv
, когда вызываю свои нативные методы из Java / Kotlin, но NDKMediaExtractor
, похоже, не знает об этом. Как я могу решить это?