<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, Sans-Serif;font-size:16px"><div id="yui_3_16_0_1_1430151272637_248378" class="" style="" dir="ltr"><font><font><font><font>Hello,</font></font></font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font><br></font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font id="yui_3_16_0_1_1430151272637_248792"><font id="yui_3_16_0_1_1430151272637_248800">I am multicasting video stream using RTP (rtph264pay) and UDP (udpsink) from a source node. </font><font id="yui_3_16_0_1_1430151272637_248791">At the client end the video stream is decoded and Displayed As They stream. </font><font id="yui_3_16_0_1_1430151272637_248805">I have coded this using gstreamer in c / c ++. </font><font>I now want to</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font id="yui_3_16_0_1_1430151272637_248794"><font id="yui_3_16_0_1_1430151272637_248793" class="goog-text-highlight">1. At the source, capture the sequence no., Packet size (in bytes) and timestamp of each packet of the video stream being Transmitted over the network.</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font id="yui_3_16_0_1_1430151272637_248796"><font id="yui_3_16_0_1_1430151272637_248795">2. At receiver, capture the sequence no. And timestamp of the received packets so as to measure delay and packet loss.</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font id="yui_3_16_0_1_1430151272637_248798"><font id="yui_3_16_0_1_1430151272637_248797">It would be great if someone Could help me suggest a way to implement this in C / C ++. </font><font>I do not want to use GST debug since I have to do some processing with the video packets. </font><font id="yui_3_16_0_1_1430151272637_248799">Here is the code for the server and client.</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>SERVER </font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>#include <GST / gst.h></font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Static gboolean</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>bus_call (GstBus * Bus,</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstMessage * msg,</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gpointer data)</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>{</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font id="yui_3_16_0_1_1430151272637_248812"><font id="yui_3_16_0_1_1430151272637_248811">GMainLoop * loop = (GMainLoop *) data;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font id="yui_3_16_0_1_1430151272637_248814"><font id="yui_3_16_0_1_1430151272637_248813">switch (GST_MESSAGE_TYPE (msg)) {</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font id="yui_3_16_0_1_1430151272637_248816"><font id="yui_3_16_0_1_1430151272637_248815">Case GST_MESSAGE_EOS:</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font id="yui_3_16_0_1_1430151272637_248824"><font id="yui_3_16_0_1_1430151272637_248823">g_print ("End of video stream \ n");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font id="yui_3_16_0_1_1430151272637_248818"><font id="yui_3_16_0_1_1430151272637_248817">g_main_loop_quit (loop);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>break;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Case GST_MESSAGE_ERROR: {</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gchar * debug;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GError * error;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_message_parse_error (msg, & error, and debug);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>G_free (debug);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_printerr ("Error:% s \ n", error-> message);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_error_free (error);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_main_loop_quit (loop);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>break;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>}</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>default:</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>break;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>}</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>return TRUE;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>}</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>static void</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>on_pad_added (GstElement * element,</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstPad * pad,</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gpointer data)</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>{</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstPad * sinkpad;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstElement * decoder = (GstElement *) data;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_print ("Dynamic pad created, linking demuxer / decoder \ n");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>sinkpad = gst_element_get_static_pad (decoder, "sink");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_pad_link (pad, sinkpad);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_object_unref (sinkpad);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>}</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>typedef struct {Custom_Data</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GMainLoop * Loop;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstElement * pipeline * source, demuxer *, * decoder, * ARATIO, * encoder * RTP, * usink, que *, * videoconvert, * videoscale_capsfilter, * VideoScaleMode;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstBus * bus;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>guint bus_watch_id;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>guint bitrate;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstCaps * c, * VideoScaleMode caps;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>} Custom_Data;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>int</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>main (int argc,</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>char * argv [])</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>{</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Custom_Data Data;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>/ * Initialization * /</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_init (& argc, argv &);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.loop = g_main_loop_new (NULL, FALSE);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>/ * Check input arguments * /</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>if (argc! = 2) {</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_printerr ("Usage:% s <cif filename> \ n", argv [0]);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>return -1;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>}</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.videoscalecaps = gst_caps_from_string ("video / x-raw, width = 1024, height = 768");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.pipeline = gst_pipeline_new ("video-send");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.source = gst_element_factory_make ("filesrc", "file-source");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_assert (Data.source);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.demuxer = gst_element_factory_make ("qtdemux", "demuxer");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_assert (Data.demuxer);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.que = gst_element_factory_make ("queue", "queer");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_assert (Data.que);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.decoder = gst_element_factory_make ("avdec_h264", the "Decoder");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_assert (Data.decoder);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.videoscale = gst_element_factory_make ("scale video", "scale");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_assert (Data.videoscale);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.videoscale_capsfilter = gst_element_factory_make ("caps filter", "videoscale_capsfilter");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_assert (Data.videoscale_capsfilter);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.aratio = gst_element_factory_make ("aspectratiocrop", "ARATIO");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_assert (Data.aratio);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.videoconvert = gst_element_factory_make ("videoconvert", "Video Convert");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_assert (Data.videoconvert);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.encoder = gst_element_factory_make ("x264enc" "encoder");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_assert (Data.encoder);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.rtp = gst_element_factory_make ("rtph264pay", "RTP");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_assert (Data.rtp);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.usink = gst_element_factory_make ("udpsink", "udp_sink");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_assert (Data.usink);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_object_set (G_OBJECT (Data.source), "location", argv [1], NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_object_set (G_OBJECT (Data.source), "do-timestamp", true, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_object_set (G_OBJECT (Data.aratio), "Aspect Ratio", 4, 3, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_object_set (G_OBJECT (Data.encoder), "b-adapt", true, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_object_set (G_OBJECT (Data.usink), "host" 224.0.0.0, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_object_set (G_OBJECT (Data.usink), "port", 5007, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_object_set (G_OBJECT (Data.usink), "auto-multicast", TRUE, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_object_set (G_OBJECT (Data.videoscale_capsfilter), "caps", Data.videoscalecaps, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.bus = gst_pipeline_get_bus (GST_PIPELINE (Data.pipeline));</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Data.bus_watch_id = gst_bus_add_watch (Data.bus, bus_call, Data.loop);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_object_unref (Data.bus);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_bin_add (GST_BIN (Data.pipeline) Data.source);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_bin_add (GST_BIN (Data.pipeline) Data.demuxer);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_bin_add (GST_BIN (Data.pipeline) Data.decoder);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_bin_add (GST_BIN (Data.pipeline) Data.videoscale);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_bin_add (GST_BIN (Data.pipeline) Data.videoscale_capsfilter);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_bin_add (GST_BIN (Data.pipeline) Data.aratio);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_bin_add (GST_BIN (Data.pipeline) Data.videoconvert);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_bin_add (GST_BIN (Data.pipeline) Data.encoder);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_bin_add (GST_BIN (Data.pipeline) Data.rtp);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_bin_add (GST_BIN (Data.pipeline) Data.usink);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>if (! gst_element_link (Data.source, Data.demuxer))</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>{</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_printerr ("Here is the problem. \ n");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>}</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>if (! gst_element_link_many (Data.decoder, Data.videoscale, Data.videoscale_capsfilter, Data.aratio, Data.videoconvert, Data.encoder, Data.rtp, Data.usink, NULL))</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>{</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_printerr ("Here is the problem too. \ n");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>}</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_signal_connect (Data.demuxer, "pad-added" G_CALLBACK (on_pad_added) Data.decoder);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_print ("Now playing:% s \ n", argv [1]);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_element_set_state (Data.pipeline, GST_STATE_PLAYING);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_main_loop_run (Data.loop);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_element_set_state (Data.pipeline, GST_STATE_NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_object_unref (GST_OBJECT (Data.pipeline));</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_source_remove (Data.bus_watch_id);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_main_loop_unref (Data.loop);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>return 0;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>} </font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>CLIENT</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>#include <GST / gst.h></font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Static gboolean</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>bus_call (GstBus * Bus,</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstMessage * msg,</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gpointer data)</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>{</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GMainLoop * loop = (GMainLoop *) data;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>switch (GST_MESSAGE_TYPE (msg)) {</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Case GST_MESSAGE_EOS:</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_print ("End of stream \ n");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_main_loop_quit (loop);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>break;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>Case GST_MESSAGE_ERROR: {</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gchar * debug;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GError * error;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_message_parse_error (msg, & error, and debug);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>G_free (debug);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_printerr ("Error:% s \ n", error-> message);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_error_free (error);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_main_loop_quit (loop);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>break;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>}</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>default:</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>break;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>}</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>return TRUE;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>}</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>static void</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>on_pad_added (GstElement * element,</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstPad * pad,</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gpointer data)</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>{</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstPad * sinkpad;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstElement * decoder = (GstElement *) data;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_print ("Dynamic pad created, linking demuxer / decoder \ n");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>sinkpad = gst_element_get_static_pad (decoder, "sink");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_pad_link (pad, sinkpad);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_object_unref (sinkpad);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>}</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>typedef struct {_CustomData</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstElement * pipeline * source * RTP, * decoder, sink *, * Video Mixer, * videoconvert, * VideoScaleMode, que *, * filter; </font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstState State;                 </font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>} Custom Data;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>int main (int argc, char * argv []) {</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>  Custom Data Data;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>  GMainLoop * Loop;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>  GstPad * pad;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstCaps * Apparel * filter caps;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstBus * bus;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>GstStateChangeReturn ret;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>  gst_init (& argc, argv &);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font> caps = gst_caps_from_string ("application / x-RTP, media = (string) video, clock rate = (int) 90000, encoding-name = (string) H264, Payload = (int) 96");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>loop = g_main_loop_new (NULL, FALSE);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>if (argc! = 1) {</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_printerr ("Usage:% s <udpsrc> \ n", argv [0]);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>return -1;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>}  </font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>data.pipeline = gst_pipeline_new ("video-receive");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>data.source = gst_element_factory_make ("udpsrc", "UDP source");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>data.videoscale = gst_element_factory_make ("scale video", "video-scale");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>data.videoconvert = gst_element_factory_make ("videoconvert", "Video Convert");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>data.sink = gst_element_factory_make ("xvimagesink", "video output");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>data.rtp = gst_element_factory_make ("rtph264depay", "RTP");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>data.decoder = gst_element_factory_make ("avdec_h264", the "Decoder");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>data.filter = gst_element_factory_make ("caps filter", "filter caps");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>data.que = gst_element_factory_make ("queue", "queer");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>filter caps = gst_caps_new_simple ("video / x-raw", "format", G_TYPE_STRING, "I420", "width", G_TYPE_INT, 200, "height", G_TYPE_INT, 200, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>if (! data.pipeline || data.source! ||! data.rtp ||! data.decoder ||! data.sink)</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>{</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_printerr ("One element Could not be created. \ n");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>return -1;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>}</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_object_set (G_OBJECT (data.filter), "caps", filter caps, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>  bus = gst_element_get_bus (data.pipeline);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>  gst_bus_add_signal_watch (bus);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>  gst_object_unref (bus);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_object_set (G_OBJECT (data.source), "multicast group", 224.0.0.0, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_object_set (G_OBJECT (data.source), "port", 5007, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_object_set (G_OBJECT (data.source), "caps", caps, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_object_set (G_OBJECT (data.source), "do-timestamp", true, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_object_set (G_OBJECT (data.sink), "sync", FALSE, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_bin_add_many (GST_BIN (data.pipeline) data.source, data.rtp, data.decoder, data.que, data.sink, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_element_link (data.source, data.decoder);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_element_link_many (data.source, data.rtp, data.decoder, data.que, data.sink, NULL);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_signal_connect (data.decoder, "pad-added" G_CALLBACK (on_pad_added) data.sink);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_print ("Now playing ... \ n"); //:% s \ n ", argv [1]);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_element_set_state (data.pipeline, GST_STATE_PLAYING);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_print ("Running ... \ n");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>g_main_loop_run (loop);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>  g_print ("Deleting pipeline \ n");</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>gst_object_unref (GST_OBJECT (data.pipeline));</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>  g_main_loop_unref (loop);</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>  return 0;</font></font></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><font><font>}</font></font></div><div class="" style="" id="yui_3_16_0_1_1430151272637_248786"><br class="" style=""></div><div id="yui_3_16_0_1_1430151272637_248378" class="" style=""><br class="" style=""></div></div></body></html>