Hinzufügen von OpenCV-Verarbeitung zu Gstreamer-Anwendung

Ich versuche Folgendes zu tun: Videostream mit gstreamer empfangen und mit opencv verarbeiten. Ich habe nur wenige Lösungen gefunden, und eine davon besteht darin, Videos in (von gstreamer) fifo zu schreiben und sie dann mit opencv zu lesen. (OPTION3 hierMJPEG Streaming und Decodierung). Das Problem ist, dass ich das Rohr nicht öffnen kann. cvCreateFileCapture kehrt einfach nie zurück. Hier ist ein Teilcode, den ich geschrieben habe:

<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>

Das Programm wird in der letzten Zeile gestapelt. PS: Ich benutze opencv 2.3.1.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage