使用Gstreamer在网络上流式传输OpenCV图像

时间:2019-02-02 19:28:49

标签: opencv gstreamer

我无法以任何方式解决我的问题;只有更多的问题发现的例子。我在OpenCV中获得帧,我想使用Gstreamer通过网络传输它们,以便输出为视频。 (操作系统-Ubuntu,语言-C ++ / C)例如,我可以从另一台设备连接并观看此流。你能告诉或者在正确的方向发吗?

我找到了附在我的问题上的示例代码。在这个例子中,我能够理解如何IplImage的数据附加到GStreamer的缓冲区,但我无法弄清楚如何将其所有在网络上传输和观看效果

cout<<"Creating appsink"<<endl;
appsink = gst_element_factory_make("appsink", "asink");
gst_app_sink_set_emit_signals((GstAppSink*)appsink, true);
gst_app_sink_set_drop((GstAppSink*)appsink, true);
gst_app_sink_set_max_buffers((GstAppSink*)appsink, 1);

//creating and initialising pipeline
g_object_set(G_OBJECT(playbin), "video-sink", appsink, NULL);
g_signal_connect(appsink, "new-buffer", G_CALLBACK(DisplayFrame), (gpointer) mark);
//callback function looks like this
gboolean Core::DisplayFrame(GstAppSink *fks, gpointer mark)
{
static bool init = false;
static IplImage *frame;
GstBuffer* buf;
Mark* mk = (Mark*) mark;

if(!init)
{
    init = true;
    frame = cvCreateImage(cvSize(mk->frame_w, mk->frame_h), IPL_DEPTH_8U, 1);
}
buf = gst_app_sink_pull_buffer(fks);
frame->imageData = (char*)GST_BUFFER_DATA(buf);

ProcessFrame(frame);
gst_buffer_unref(buf);
return true;
}

0 个答案:

没有答案