video server -client problem

Chuck Crisler ccrisler at mutualink.net
Wed May 21 10:15:17 PDT 2014


Enable logging and see where the problem lies. export
GST_DEBUG=*:3,GST_ELEMENT:5 is a good start. Then, see what you get and
make adjustments. This sounds like a caps negiotiation issue.


On Wed, May 21, 2014 at 10:35 AM, metind <metin.duman at arcelik.com> wrote:

> Dear all,
>
> I am using gstream 0.36 version in ubuntu linux and wrote server and client
> applications. I used for server part;
> gst-launch videotestsrc ! ffmpegcolorspace ! vp8enc ! queue2 ! mux.
> audiotestsrc ! audioconvert ! vorbisenc ! queue2 ! mux. webmmux name=mux
> streamable=true ! tcpserversink port=9002
> and for client part;
> gst-launch tcpclientsrc host=192.168.32.134 port=9002 ! matroskademux
> name=d
> d. ! queue2 ! vp8dec ! ffmpegcolorspace ! autovideosink d. ! queue2 !
> vorbisdec ! audioconvert ! audioresample ! alsasink sync=true
>
> Also i send the source codes. When i run server and client parts, i get an
> error for client part as;
> Running...
> Error: Internal data flow error.
> Returned, stopping playback
> Deleting pipeline
> I couldnt find any solution about it and dont understand where i do any
> mistake. Could you pls help me about this subject.
>
> /*********SERVER.C***********/
> #define HOST    "192.168.32.134"
> #define PORT 9002
>
> #include <gst/gst.h>
> #include <glib.h>
>
> static gboolean
> bus_call (GstBus *bus, GstMessage *msg, gpointer data)
> {
>   GMainLoop *loop = (GMainLoop *) data;
>
>   switch (GST_MESSAGE_TYPE (msg)) {
>
>     case GST_MESSAGE_EOS:
>       g_print ("End of stream\n");
>       g_main_loop_quit (loop);
>       break;
>
>     case GST_MESSAGE_ERROR: {
>       gchar  *debug;
>       GError *error;
>
>       gst_message_parse_error (msg, &error, &debug);
>       g_free (debug);
>
>       g_printerr ("Error: %s\n", error->message);
>       g_error_free (error);
>
>       g_main_loop_quit (loop);
>       break;
>     }
>     default:
>       break;
>   }
>
>   return TRUE;
> }
>
> int
> main (int argc, char *argv[])
> {
>   GMainLoop *loop;
>
>   GstElement *pipeline, *videosrc, *colorspace, *videoenc,
>     *videoq, *audiosrc, *conv, *audioenc, *audioq, *muxer, *sink;
>
>   GstBus *bus;
>
>   /* Initialisation */
>   gst_init (&argc, &argv);
>
>   loop = g_main_loop_new (NULL, FALSE);
>
>   /* Check input arguments */
>   if (argc != 2) {
>     g_printerr ("Usage: %s <port number>\n", argv[0]);
>     return -1;
>   }
>
>   /* Create gstreamer elements */
>   pipeline = gst_pipeline_new ("audio-player");
>   videosrc = gst_element_factory_make ("videotestsrc", "videosrc");
>   colorspace = gst_element_factory_make ("ffmpegcolorspace", "colorspace");
>   videoenc = gst_element_factory_make ("vp8enc", "videoenc");
>   videoq = gst_element_factory_make ("queue2", "videoq");
>   audiosrc = gst_element_factory_make ("audiotestsrc", "audiosrc");
>   conv = gst_element_factory_make ("audioconvert", "converter");
>   audioenc = gst_element_factory_make ("vorbisenc", "audioenc");
>   audioq = gst_element_factory_make ("queue2", "audioq");
>   muxer = gst_element_factory_make ("webmmux", "mux");
>   sink = gst_element_factory_make ("tcpserversink", "sink");
>
>   if (!pipeline || !videosrc || !colorspace || !videoenc
>     || !videoq || !audiosrc || !conv || !audioenc || !audioq
>     || !muxer || !sink) {
>     g_printerr ("One element could not be created. Exiting.\n");
>     return -1;
>   }
>
>   /* Set up the pipeline */
>
>   /* we set the port number to the sink element */
>   g_object_set (G_OBJECT (sink), "port", atoi(argv[1]),
>     "host", /*"localhost"*/HOST, NULL);
>
>   /* set the properties of other elements */
>   //g_object_set (G_OBJECT (videosrc), "horizontal-speed", 1, NULL);
>   //g_object_set (G_OBJECT (videosrc), "is-live", 1, NULL);
>   //g_object_set (G_OBJECT (videoenc), "speed", 2, NULL);
>   //g_object_set (G_OBJECT (audiosrc), "is-live", 1, NULL);
>   g_object_set (G_OBJECT (muxer), "streamable", 1, NULL);
>
>   /* we add a message handler */
>   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
>   gst_bus_add_watch (bus, bus_call, loop);
>   gst_object_unref (bus);
>
>   /* we add all elements into the pipeline */
>   gst_bin_add_many (GST_BIN (pipeline),
>     videosrc, colorspace, videoenc, videoq, audiosrc, conv,
>     audioenc, audioq, muxer, sink, NULL);
>
>   /* we link the elements together */
>   gst_element_link_many (videosrc, colorspace, videoenc,
>     videoq, muxer, NULL);
>   gst_element_link_many (audiosrc, conv, audioenc, audioq,
>     muxer, NULL);
>   gst_element_link(muxer, sink);
>
>   /* Set the pipeline to "playing" state*/
>   g_print ("Streaming to port: %s\n", argv[1]);
>   gst_element_set_state (pipeline, GST_STATE_PLAYING);
>
>   /* Iterate */
>   g_print ("Running...\n");
>   g_main_loop_run (loop);
>
>   /* Out of the main loop, clean up nicely */
>   g_print ("Returned, stopping playback\n");
>   gst_element_set_state (pipeline, GST_STATE_NULL);
>
>   g_print ("Deleting pipeline\n");
>   gst_object_unref (GST_OBJECT (pipeline));
>
>   return 0;
> }
>
>
> /************CLIENT.C**********/
>
> #define HOST    "192.168.32.134"
> #define PORT 9002
>
> #include <gst/gst.h>
> #include <glib.h>
>
> static gboolean
> bus_call (GstBus *bus, GstMessage *msg, gpointer data)
> {
>   GMainLoop *loop = (GMainLoop *) data;
>
>   switch (GST_MESSAGE_TYPE (msg)) {
>
>     case GST_MESSAGE_EOS:
>       g_print ("End of stream\n");
>       g_main_loop_quit (loop);
>       break;
>
>     case GST_MESSAGE_ERROR: {
>       gchar  *debug;
>       GError *error;
>
>       gst_message_parse_error (msg, &error, &debug);
>       g_free (debug);
>
>       g_printerr ("Error: %s\n", error->message);
>       g_error_free (error);
>
>       g_main_loop_quit (loop);
>       break;
>     }
>     default:
>       break;
>   }
>
>   return TRUE;
> }
>
> int
> main (int argc, char *argv[])
> {
>   GMainLoop *loop;
>
>   GstElement *pipeline,  *colorspace, *videodec,
>     *videoq,  *conv, *audiodec, *audioq, *demuxer,
> *source,*sink,*resample,*videosink;
>
>   GstBus *bus;
>
>   /* Initialisation */
>   gst_init (&argc, &argv);
>
>   loop = g_main_loop_new (NULL, FALSE);
>
>   /* Check input arguments */
>   if (argc != 2) {
>     g_printerr ("Usage: %s <port number>\n", argv[0]);
>     return -1;
>   }
>
>
>
>   /* Create gstreamer elements */
>   pipeline = gst_pipeline_new ("audio-player");
>   if (!pipeline)
>    {
>     g_printerr ("pipeline could not be created. Exiting.\n");
>     return -1;
>     }
>   colorspace = gst_element_factory_make ("ffmpegcolorspace", "colorspace");
>    if (!colorspace)
>    {
>     g_printerr ("colorspace could not be created. Exiting.\n");
>     return -1;
>     }
>   videodec = gst_element_factory_make ("vp8dec", "videodec");
>   if (!videodec)
>    {
>     g_printerr ("videodec could not be created. Exiting.\n");
>     return -1;
>     }
>   videoq = gst_element_factory_make ("queue2", "videoq");
>   if (!videoq)
>    {
>     g_printerr ("videoq could not be created. Exiting.\n");
>     return -1;
>     }
>   conv = gst_element_factory_make ("audioconvert", "converter");
>   if (!conv)
>    {
>     g_printerr ("conv could not be created. Exiting.\n");
>     return -1;
>     }
>   audiodec = gst_element_factory_make ("vorbisdec", "audiodec");
>   if (!audiodec)
>    {
>     g_printerr ("audiodec could not be created. Exiting.\n");
>     return -1;
>     }
>   audioq = gst_element_factory_make ("queue2", "audioq");
>   if (!audioq)
>    {
>     g_printerr ("audioq could not be created. Exiting.\n");
>     return -1;
>     }
>   demuxer = gst_element_factory_make ("matroskademux", "demux");
>   if (!demuxer)
>    {
>     g_printerr ("demuxer could not be created. Exiting.\n");
>     return -1;
>     }
>   source = gst_element_factory_make ("tcpclientsrc", "source");
>   if (!source)
>    {
>     g_printerr ("source could not be created. Exiting.\n");
>     return -1;
>     }
>   resample = gst_element_factory_make ("audioresample", "resample");
>   if (!resample)
>    {
>     g_printerr ("resample could not be created. Exiting.\n");
>     return -1;
>     }
>   sink = gst_element_factory_make ("alsasink", "sink");
>   if (!sink)
>    {
>     g_printerr ("sink could not be created. Exiting.\n");
>     return -1;
>     }
>   videosink = gst_element_factory_make ("autovideosink", "videosink");
>   if (!videosink)
>    {
>     g_printerr ("videosink could not be created. Exiting.\n");
>     return -1;
>     }
>  /*
>  if (!pipeline || !colorspace || !videodec
>     || !videoq || !conv || !audiodec || !audioq
>     || !demuxer || !sink || !source || !resample || !videosink) {
>     g_printerr ("One element could not be created. Exiting.\n");
>     return -1;
>   }*/
>
>   /* Set up the pipeline */
>
>   /* we set the port number to the sink element */
>   g_object_set (G_OBJECT (source), "port", atoi(argv[1]),
>     "host", /*"localhost"*/HOST, NULL);
>
>   /* set the properties of other elements */
>   //g_object_set (G_OBJECT (videosrc), "horizontal-speed", 1, NULL);
>   //g_object_set (G_OBJECT (videosrc), "is-live", 1, NULL);
>   //g_object_set (G_OBJECT (videoenc), "speed", 2, NULL);
>   //g_object_set (G_OBJECT (audiosrc), "is-live", 1, NULL);
>   //g_object_set (G_OBJECT (muxer), "streamable", 1, NULL);
>
>   /* we add a message handler */
>   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
>   gst_bus_add_watch (bus, bus_call, loop);
>   gst_object_unref (bus);
>
>   /* we add all elements into the pipeline */
>   gst_bin_add_many (GST_BIN (pipeline),
>     colorspace, videodec, videoq, conv,
>     audiodec, audioq, demuxer, source,sink,resample, NULL);
>
>
>   /* we link the elements together */
>   gst_element_link(source, demuxer);
>   gst_element_link_many (demuxer,videoq,videodec, colorspace,
> videosink,NULL);
>   gst_element_link_many (demuxer, audioq,audiodec, conv, resample,sink,
> NULL);
>
>
>   /* Set the pipeline to "playing" state*/
>   g_print ("Streaming to port: %s\n", argv[1]);
>   gst_element_set_state (pipeline, GST_STATE_PLAYING);
>
>   /* Iterate */
>   g_print ("Running...\n");
>   g_main_loop_run (loop);
>
>   /* Out of the main loop, clean up nicely */
>   g_print ("Returned, stopping playback\n");
>   gst_element_set_state (pipeline, GST_STATE_NULL);
>
>   g_print ("Deleting pipeline\n");
>   gst_object_unref (GST_OBJECT (pipeline));
>
>   return 0;
> }
>
>
>
> --
> View this message in context:
> http://gstreamer-devel.966125.n4.nabble.com/video-server-client-problem-tp4667078.html
> Sent from the GStreamer-devel mailing list archive at Nabble.com.
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/gstreamer-devel/attachments/20140521/c9ccde83/attachment-0001.html>


More information about the gstreamer-devel mailing list