<h2>Good day plz help</h2>

I am busy developinga streaming framework and i have a board that takes a rtsp stream  and sends it to a udpsink. First of all the pipeline for the server listening( This works in commandline and my C++ application):

udpsrc ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! theoraenc ! oggmux ! shout2send

Now the pipeline that sends the stream to th udpsocket looks like follows:

gst-launch-1.0 rtspsrc location=rtsp://10.15.1.15/video.h264 user-id=id user-pw=pw latency=0 ! udpsink host=ipaddr port=5555

This pipeline works fine and sends the stream to the UDP port. I can see the pipeline on the server change from paused to playing as soon as i send the stream to the socket. (Works for both my server pipeline and application)

Now the part that doesn't make sense, This doesn't work on my C++ application for the board that sends the stream. The application on the board goes all the way to the playing state but the pipeline/application on the server just stays in the paused state. It is like it never notices that the the stream was sent to the UDP port. Below is my code for the application on the board:


<i>#include <gst/gst.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct _CustomData {
        GstElement *pipeline;
        GstElement *source;
        GstElement *sink;
        GMainLoop *main_loop;
        GstBus *bus;

}       CustomData;

/* Handler for the pad-added signal, bus messages ,keyboard input and probes*/
static void pad_added_handler(GstElement *src, GstPad *pad, CustomData *data);
static gboolean handle_message(GstBus *bus, GstMessage *msg, CustomData *data);

int main(int argc, char *argv[]) {
/*Variable Declaration*/
        CustomData data;
        guint bus_watch_id;
        GstStateChangeReturn state_returned;

/*Initialize GStreamer*/
        gst_init(&argc, &argv);

/*Create the elements for the pipe*/
        data.source = gst_element_factory_make("rtspsrc", "source");
        data.sink = gst_element_factory_make("udpsink", "sink");

/*Create the storage pipeline*/
        data.pipeline = gst_pipeline_new("stream-pipeline");

        if(!data.pipeline || !data.source || !data.sink){
                g_printerr("Not all elements could be created.\n");
    return -1;
        }

/*Build the pipeline*/
        gst_bin_add_many(GST_BIN(data.pipeline), data.source, data.sink, NULL);

/*Set the source elements' properties*/
        g_object_set(data.source,"location","rtsp://10.15.1.15/h264/ch1/main/av_stream","user-id","admin","user-pw","admin123","name","source","latency","500",NULL);

/*Set the sink elements' properties*/
        g_object_set(data.sink,"clients","10.15.1.182:5555",NULL);

/*Link pads betwen rtspsrc and rtpjitterbuffer*/
        g_signal_connect(data.source, "pad-added", G_CALLBACK(pad_added_handler),&data);

/* Add a bus watch, so we get notified when a message arrives */
  data.bus = gst_element_get_bus (data.pipeline);
  bus_watch_id = gst_bus_add_watch (data.bus, (GstBusFunc)handle_message, &data);

/*Start playing the pipe*/
        state_returned = gst_element_set_state(data.pipeline, GST_STATE_PLAYING);
  if (state_returned == GST_STATE_CHANGE_FAILURE) {
    g_printerr ("Unable to set the pipeline to the playing state.\n");
    gst_object_unref (data.pipeline);
    return -1;
  }

/*Create a GLib Main Loop and set it to run*/
        data.main_loop = g_main_loop_new(NULL, FALSE);
        g_main_loop_run(data.main_loop);

/* Free resources */
        gst_object_unref (data.bus);
  gst_element_set_state (data.pipeline, GST_STATE_NULL);
  gst_object_unref (data.pipeline);
        g_main_loop_unref(data.main_loop);
  return 0;

}

/* This function will be called by the pad-added signal */
static void pad_added_handler (GstElement *src, GstPad *new_pad, CustomData *data) {
        GstElement *link_element = GST_ELEMENT(data->sink);
        GstPad *sink_pad;

        sink_pad = gst_element_get_static_pad (link_element, "sink");
        gst_pad_link (new_pad, sink_pad);

  gst_object_unref (sink_pad);
}

/*Process messages from GStreamer*/
static gboolean handle_message(GstBus *bus, GstMessage *msg, CustomData *data){
        GError *err;
        gchar *debug_info;

        switch (GST_MESSAGE_TYPE (msg)) {
                case GST_MESSAGE_ERROR:
                        gst_message_parse_error (msg, &err, &debug_info);
                        g_printerr ("Error received from element %s: %s\n", GST_OBJECT_NAME (msg->src), err->message);
                        g_printerr ("Debugging information: %s\n", debug_info ? debug_info : "none");
                        g_clear_error (&err);
                        g_free (debug_info);
                        g_main_loop_quit(data->main_loop);
                        break;
                case GST_MESSAGE_EOS:
                        g_print ("EOS received on OBJ NAME %s\n",GST_OBJECT_NAME(msg->src));

                        g_main_loop_quit(data->main_loop);
                        break;
                case GST_MESSAGE_STATE_CHANGED:
                /*State-changed messages from the pipeline*/
                        if (GST_MESSAGE_SRC (msg) == GST_OBJECT (data->pipeline)) {
                                GstState old_state, new_state, pending_state;
                                gst_message_parse_state_changed (msg, &old_state, &new_state, &pending_state);
                                g_print ("Pipeline state changed from %s to %s:\n",
                                                gst_element_state_get_name (old_state), gst_element_state_get_name (new_state));
                        }
                        break;
                default:
                        break;
        }
/*Keep receiving messages*/
  return TRUE;
}</i>

        
        
        
<br/><hr align="left" width="300" />
View this message in context: <a href="http://gstreamer-devel.966125.n4.nabble.com/rtspsrc-to-udpsink-Command-line-pipeline-works-C-application-doesn-t-NEED-HELP-URGENTLY-tp4675894.html">rtspsrc to udpsink, Command line pipeline works, C++ application doesn't NEED HELP URGENTLY</a><br/>
Sent from the <a href="http://gstreamer-devel.966125.n4.nabble.com/">GStreamer-devel mailing list archive</a> at Nabble.com.<br/>