2014-06-19 2 views
1

gstreamer으로 Android 튜토리얼을 읽었습니다. 나는 에서 다른 하나의 안드로이드 전화, like this에 간단한 파이프 라인을 만들고 싶습니다. 다음 질문을 읽었습니다 : loading same gstreamer elements multiple times in a process, 및 JNI - multi threads,하지만 현재의 문제를 해결하는 데 도움이되지 않았습니다.Android gstreamer에서 여러 프로세스 사용!

나는 안드로이드 전화가 을 보내고 오디오를 수신하도록 두 가지 과정을 만들고 싶습니다!

리눅스에

이 같은 fork()을 사용합니다 :

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

그러나이 안드로이드에서 작동하지 않습니다, 나는이 오류를 얻을 :

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

가 어떻게이 문제를 해결 할 수 있습니다?

+0

()가'NDK에 권장하지 않습니다, (참조 : https://groups.google.com/forum/#!msg/android-platform/80jr-_A-9bU/nkzslcgVrfYJ를) 나는 일부 변수가 초기화되지 않을 수 있습니다. 어설 션 오류의 원인이 될 수 있습니다. –

+0

포크로 시도했지만 더 이상 오류는 없었지만 두 번째 프로세스가 실행되고 있지 않습니다 !! 이것을 할 또 다른 방법이 있습니까? "runOnUiThread (new Runnable() ..")로 작업하여 다른 프로세스를 만드는 방법이 있습니까? – user3684082

답변

0

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); 
}