Я работаю над прошивкой Android для встроенного устройства, которое транслирует закодированный видеосигнал с использованием rtp.Основной библиотекой является MediaStreamer2, потому что она поставляется с поддержкой Android, различными кодеками и libortp.Поэтому я интегрировал libmediastreamer и его зависимости в процесс сборки прошивки.
В качестве второго шага я написал простое приложение для командной строки Android в виде PoC, которое транслирует аудио или видео по сети.К сожалению, первый вызов ms_init()
завершается неудачно из-за:
bctbx-fatal-Calling ms_get_jni_env (), в то время как jvm не был установлен с помощью ms_set_jvm ()
Копатьнемного глубже в этой проблеме, кажется, что Android-версия libmediastreamer была разработана с точки зрения NDK: она может быть вызвана как часть приложения Android и, следовательно, автоматически получает ссылку на JVM (DVM?).К сожалению, это не мой случай использования.
Я пытался удалить зависимости (запрос версии Sdk, поддержка аппаратного эхоподавления и т. Д.), Но безуспешно.Поэтому мой следующий подход - запуск виртуальной машины вручную и передача ее в библиотеку.Я пробовал API-интерфейсы для Oracle:
JNIEnv env;
JavaVM vm;
JavaVMInitArgs vm_args;
JavaVMOption options[4];
options[0].optionString = "-Djava.compiler=NONE";
options[1].optionString = "-verbose:jni";
vm_args.version = JNI_VERSION_1_2;
vm_args.options = options;
vm_args.nOptions = 4;
vm_args.ignoreUnrecognized = TRUE;
jint res = JNI_CreateJavaVM(&vm, (void **)&env, &vm_args);
Но приложение закрывается с простым «прерыванием».Тем не менее, я не уверен, что это путь, потому что это мир Android и Dalvik.
Есть предложения?