Android NDK: как решить "E / NdkMediaExtractor: setDataSource (путь) должен быть вызван из Java потока" - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь использовать 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, похоже, не знает об этом. Как я могу решить это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...