Hello I want to integrate opencv in Gstreamer, to give details, I want to read the data in v4l2src with appsink, do opencv operations and transfer it to a unicast broadcast with appsrc, but when I do this, the pipeline constantly resets itself, I couldn’t figure out why. I would be happy if you could help.
if(gst_element_link_many(GMainElement.v4l2src, GMainElement.source2convertcapsfilter GMainElement.tee, NULL) !=TRUE ||
gst_element_link_many (GUnicastElement.queue_unicast, GUnicastElement.videoconvert1, GUnicastElement.cairooverlay, GUnicastElement.videoconvert2, GUnicastElement.nvvidconv, GUnicastElement.convert2encodercapsfilter, GUnicastElement.nvv4l2h265enc, GUnicastElement.encoder2muxcapsfilter, GUnicastElement.mpegtsmux, GUnicastElement.mux2payloadcapsfilter, GUnicastElement.rtpmp2tpay, GUnicastElement.payload2udpcapsfilter, GUnicastElement.udpsink, NULL) !=TRUE ||
gst_element_link_many (GMulticastElement.queue_multicast, GMulticastElement.nvvidconv, GMulticastElement.convert2encodercapsfilter, GMulticastElement.nvv4l2h265enc, GMulticastElement.encoder2muxcapsfilter, GMulticastElement.mpegtsmux, GMulticastElement.mux2payloadcapsfilter, GMulticastElement.rtpmp2tpay, GMulticastElement.payload2udpcapsfilter, GMulticastElement.udpsink, NULL) !=TRUE ||
gst_element_link_many (GAppsinkElement.queue_appsink, GAppsinkElement.nvvidconv, GAppsinkElement.convert2encodercapsfilter, GAppsinkElement.nvv4l2h265enc, GAppsinkElement.encoder2muxcapsfilter, GAppsinkElement.mpegtsmux, GAppsinkElement.mux2payloadcapsfilter, GAppsinkElement.appsinkCV, NULL) != TRUE || gst_element_link_many (GAppsinkElement.appsourceCV, GaAppsinkElement.unicast_cv NULL) != TRUE)
tee_unicast_pad = gst_element_get_request_pad(GMainElement.tee, src); queue_unicast_pad = gst_element_get_static_pad(GUnicastElement.queue_unicast, “sink”);
tee_multicast_pad = gst_element_get_request_pad(GMainElement.tee, src); queue_multicast_pad = gst_element_get_static_pad(GUnicastElement.queue_multicast, “sink”);
tee_appsink_pad = gst_element_get_request_pad(GMainElement.tee, src); queue_appsink_pad = gst_element_get_static_pad(GAppsinkElement.queue_appsink, “sink”);
if (gst_pad_link(GUnicastElement.tee_pad, GUnicastElement.queue_pad) != GST_PAD_LINK_OK || gst_pad_link(GMulticastElement.tee_pad, GMulticastElement.queue_pad) != GST_PAD_LINK_OK || gst_pad_link(GAppsinkElement.tee_pad, GAppsinkElement.queue_pad) != GST_PAD_LINK_OK)
Appsink Method → void setAppSink(){ _appsinkCV = gst_element_link_factory_make(appsink, “appsink0”); g_object_set(G_OBJECT(_appsinkCV), emit-signals, TRUE, synchronized, FALSE, NULL); }
Appsrc Method → void setAppSource(){ _appsourceCV = gst_element_link_factory_make(appsrc, “appsrc0”); g_object_set(G_OBJECT(_appsourceCV), caps, “gst_caps_new_simple”(…), NULL); }
Callback Method → g_signal_connect(_appsinkCV, “new-sample”, G_CALLBACK(callback_function_opencv), _appsourceCV);