<div dir="ltr">Hello all,<div><br></div><div>I am extremely new to gstreamer.</div><div><br></div><div>I am trying to read frame data for a live streaming video through gstreamer in C to create an opengl texture.</div><div><br></div><div>Currently going through online repositories and tutorials I could come up code below, which is still not working. I was hoping if somebody could point me in the right direction  or point out errors in code or errors in the approach I am using. Any help would be appreciated. </div><div><br></div><div>The code below is not creating texture. I am just accessing frame data on line 21 as a first milestone.</div><div>Code lines which I feel are important to approach are marked as bold.</div><div><ol><li><font face="monospace">#include <gst/gst.h></font></li><li><font face="monospace">#include <string.h></font></li><li><font face="monospace">#include <stdio.h></font></li><li><font face="monospace"><br></font></li><li><font face="monospace">typedef struct _CustomData {</font></li><li><font face="monospace">  GstElement *pipeline,*sink,*bin;</font></li><li><font face="monospace">  GstPad *pad,*ghost_pad;</font></li><li><font face="monospace">  GstBus *bus;</font></li><li><font face="monospace">  GstMessage *msg;</font></li><li><font face="monospace">  GMainLoop *loop; </font></li><li><font face="monospace">  gboolean is_live;</font></li><li><font face="monospace">} CustomData;</font></li><li><font face="monospace"><br></font></li><li><font face="monospace">//signal handling function</font></li><li><font face="monospace"><b>void frame_func(GstElement *sink, CustomData *data){</b></font></li><li><font face="monospace">  printf("frame signal\n");</font></li><li><font face="monospace">  GstSample *sample;</font></li><li><font face="monospace">  GstBuffer *buf;</font></li><li><font face="monospace">  g_signal_emit_by_name(sink,"pull_sample",&sample);</font></li><li><font face="monospace">  buf=gst_sample_get_buffer(sample);</font></li><li><font face="monospace">  printf("%c\n",buf[0]) </font></li><li><font face="monospace">  if(sample){</font></li><li><font face="monospace">    gst_sample_unref(sample);</font></li><li><font face="monospace">  }</font></li><li><font face="monospace">}</font></li><li><font face="monospace"><br></font></li><li><font face="monospace">int main(int argc, char *argv[]) {</font></li><li><font face="monospace">  GstElement *pipeline,*sink;</font></li><li><font face="monospace">  GstBus *bus;</font></li><li><font face="monospace">  GMainLoop *main_loop;</font></li><li><font face="monospace">  GstStateChangeReturn ret;</font></li><li><font face="monospace">  CustomData data;</font></li><li><font face="monospace"><br></font></li><li><font face="monospace">//initialize</font></li><li><font face="monospace">  gst_init (&argc, &argv);</font></li><li><font face="monospace">  memset (&data, 0, sizeof (data));</font></li><li><font face="monospace"><br></font></li><li><font face="monospace">//setup pipeline</font></li><li><font face="monospace"> <b> pipeline = gst_parse_launch ("uridecodebin uri=rtsp://<a href="http://192.168.1.221/stream2.sdp">192.168.1.221/stream2.sdp</a>! decodebin ! appsink name=video-sink caps=\"video/x-raw,format=RGB,pixel-aspect-ratio=1/1\"", NULL);</b></font></li><li><font face="monospace"><br></font></li><li><font face="monospace"> //access sink to create signal</font></li><li><font face="monospace"><b>  sink=gst_bin_get_by_name(GST_BIN(pipeline),"video-sink");</b></font></li><li><font face="monospace"><br></font></li><li><font face="monospace">//setting video to play</font></li><li><font face="monospace">  ret = gst_element_set_state (pipeline, GST_STATE_PLAYING);</font></li><li><font face="monospace">  if (ret == GST_STATE_CHANGE_FAILURE)  {</font></li><li><font face="monospace">    g_printerr ("Unable to set the pipeline to the playing state.\n");</font></li><li><font face="monospace">    gst_object_unref (pipeline);</font></li><li><font face="monospace">    return -1;</font></li><li><font face="monospace">  } else{</font></li><li><font face="monospace">     if (ret == GST_STATE_CHANGE_NO_PREROLL)</font></li><li><font face="monospace">      printf("for live sources, state changed but data could not be produced\n");</font></li><li><font face="monospace">    else if (ret == GST_STATE_CHANGE_ASYNC)</font></li><li><font face="monospace">      printf("state will change async\n");</font></li><li><font face="monospace">    else if (ret == GST_STATE_CHANGE_SUCCESS)</font></li><li><font face="monospace">      printf("successfully played\n");</font></li><li><font face="monospace">    else</font></li><li><font face="monospace">      printf("unknown %d\n",ret);</font></li><li><font face="monospace">    data.is_live=TRUE;</font></li><li><font face="monospace">  }</font></li><li><font face="monospace">  bus = gst_element_get_bus (pipeline);</font></li><li><font face="monospace"><br></font></li><li><font face="monospace"><b>//setting up signals from sink</b></font></li><li><font face="monospace"><b>  g_object_set(G_OBJECT(sink),"emit-signals",TRUE,NULL);</b></font></li><li><font face="monospace"><b>  g_signal_connect (sink, "new-sample", G_CALLBACK(frame_func), &data);</b></font></li><li><font face="monospace"><br></font></li><li><font face="monospace">//setting up loop</font></li><li><font face="monospace">  main_loop = g_main_loop_new (NULL, FALSE);</font></li><li><font face="monospace">  data.loop = main_loop;</font></li><li><font face="monospace">  data.pipeline = pipeline;</font></li><li><font face="monospace">  data.sink = sink;</font></li><li><font face="monospace"><br></font></li><li><font face="monospace">  g_main_loop_run (main_loop);</font></li><li><font face="monospace"><br></font></li><li><font face="monospace">//cleanup</font></li><li><font face="monospace">  if(msg!=NULL)</font></li><li><font face="monospace">    gst_message_unref(msg);</font></li><li><font face="monospace">  g_main_loop_unref (main_loop);</font></li><li><font face="monospace">  gst_object_unref (bus);</font></li><li><font face="monospace">  gst_element_set_state (pipeline, GST_STATE_NULL);</font></li><li><font face="monospace">  gst_object_unref (pipeline);</font></li><li><font face="monospace">  return 0;</font></li><li><font face="monospace">}</font></li></ol></div></div>