Используйте несколько процессов в Android gstreamer!!‏

Я читаю учебник по Android для gstreamer. Я хочу создать простой конвейер с одного телефона Android на другой, вот так. Я прочитал эти вопросы: загрузка того же gstreamer элементы несколько раз в процессе и JNI – многопоточность, но они не помогите мне решить мою текущую проблему.

Я хотел бы сделать два процесса, чтобы телефон Android отправлял и получал звук!

В Linux я бы использовал fork(), например:

p = fork();
if p==0{
    //pipeline1
}
else {
   //pipeline2
}

Но это не работает на Android, я получаю эту ошибку:

{
g_source_set_callback: assertion `source != NULL' failed
Fatal signal 11 (SIGSEGV) at 0x00000010 (code=1)
}

Как я могу решить эту проблему?


person user3684082    schedule 19.06.2014    source источник
comment
Использование fork() в NDK не рекомендуется (см.: groups.google.com/forum/#!msg/android-platform/80jr-_A-9bU/), как я полагаю, некоторые переменные могут быть неинициализированы, что может быть причиной ошибки утверждения   -  person Avinash R    schedule 19.06.2014
comment
Я пробовал с вилкой, и больше никаких ошибок, но второй процесс не запущен!! есть ли другой способ сделать это? есть ли кто-нибудь, как работать с runOnUiThread (новый Runnable () .., чтобы сделать другой процесс?   -  person user3684082    schedule 20.06.2014


Ответы (1)


С GStreamer вы можете запустить 2 конвейера в одном процессе, не беспокоясь о многопоточности, поскольку она уже обрабатывается внутри.

void
start (GError **error) {
  GstElement *pipe1;
  GstElement *pipe2;

  *error = NULL;
  pipe1 = gst_parse_launch ("src ! enc ! mux ! sink", error);
  if (*error != NULL)
    return;
  pipe2 = gst_parse_launch ("src ! demux ! dec ! sink", error);
  if (*error != NULL)
    return;
  gst_element_set_state (pipe1, GST_STATE_PLAYING);
  gst_element_set_state (pipe2, GST_STATE_PLAYING);
}
person ylatuya    schedule 24.06.2014