Добавление обработки opencv в приложение gstreamer
Я пытаюсь сделать следующее: получить видеопоток с помощью gstreamer и обработать его с помощью opencv. Я нашел несколько решений, и одно из них - записать видео в (из gstreamer) fifo, а затем прочитать его с помощью opencv. (ВАРИАНТ 3 здесьMJPEG потоковое и декодирование). Проблема в том, что я не могу открыть трубу. cvCreateFileCapture просто никогда не возвращается. Вот код части, которую я написал:
<code>if(mkfifo("fifo.avi", S_IRUSR| S_IWUSR) == -1) { cout<<"Cant create fifo"<<endl; cout<<errno<<endl; } loop = g_main_loop_new(NULL, false); fsink = gst_element_factory_make("filesink", "fsink"); g_object_set(G_OBJECT(fsink), "location", "fifo.avi", NULL); playbin = gst_element_factory_make("playbin2", "play"); g_object_set(G_OBJECT(playbin), "uri", uri.c_str(), NULL); g_object_set(G_OBJECT(playbin), "video-sink", fsink, NULL); bus = gst_pipeline_get_bus(GST_PIPELINE(playbin)); gst_bus_add_signal_watch(bus); g_signal_connect(bus, "message::buffering", G_CALLBACK(&set_playbin_state), playbin); gst_object_unref(bus); cvNamedWindow("output", CV_WINDOW_AUTOSIZE); capture = cvCreateFileCapture("fifo.avi"); </code>
Программа укладывается в последнюю строку. PS: я использую opencv 2.3.1.