L'ajout d'opencv traitement de gstreamer application

Je suis en train d'effectuer les opérations suivantes: recevoir des flux vidéo en utilisant gstreamer et le traiter avec opencv. J'ai trouvé quelques solutions, et l'un d'eux est d'écrire la vidéo (à partir de gstreamer) fifo et puis le lire à l'aide d'opencv. (OPTION3 ici MJPEG streaming et de décodage). Le problème est que je ne peux pas ouvrir le canal. cvCreateFileCapture juste ne retourne jamais. Voici une partie du code que j'ai écrit:

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

Le programme des piles dans la dernière ligne.
PS: je suis en utilisant opencv 2.3.1.

OriginalL'auteur Roman | 2012-05-01