dvbbasebin and tcpserversink

Zaheer Merali zaheerabbas at merali.org
Tue Feb 22 05:35:08 PST 2011


On Fri, Feb 18, 2011 at 12:22 PM, Bernhard Graaf <bernhard.graaf at gmx.de> wrote:
> Hi,
>
> I'm a new gstreamer developer and have a small problem with a simple pipe.
> If I'm use the pipe:
> "gst-launch-0.10 -m dvbbasebin adapter=1 frequency=12544000
> program-numbers=17501 polarity=h symbol-rate=22000 ! tcpserversink
> port=8080"
>
> Then I can see the program (for e.g. with vlc tcp://192.168.1.102:8080)
>
> If I try to do the same in C-code
> --------
> int
> main ()
> {
>   GMainLoop *loop;
>
>   GstElement *pipeline, *source, *sink;
>   GstBus *bus;
>
>   gst_init (NULL, NULL);
>
>   loop = g_main_loop_new (NULL, FALSE);
>
>   pipeline = gst_pipeline_new ("DVB-Streamer");
>   source   = gst_element_factory_make ("dvbbasebin",       "dvb-source");
>   sink     = gst_element_factory_make ("tcpserversink", "tcp-output");
>
>   if (!pipeline || !source || !sink) {
>     g_printerr ("One element could not be created. Exiting.\n");
>     if(!pipeline) g_printerr("Pipeline not created\n");
>     else if(!source) g_printerr("Source not created\n");
>     else if(!sink) g_printerr("Sink not created\n");
>     return -1;
>   }
>
>   g_object_set (G_OBJECT (source), "adapter", 1, NULL);
>   g_object_set (G_OBJECT (source), "frequency", 12544000, NULL);
>   g_object_set (G_OBJECT (source), "program-numbers", "17501", NULL);
>   g_object_set (G_OBJECT (source), "polarity", "h", NULL);
>   g_object_set (G_OBJECT (source), "symbol-rate", 22000, NULL);
>   g_object_set (G_OBJECT (sink), "port", 8080, NULL);
>
>   bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
>   gst_bus_add_watch (bus, bus_call, loop);
>   gst_object_unref (bus);
>
>   gst_bin_add_many (GST_BIN (pipeline),
>                     source, sink, NULL);
>
>   gst_element_link (source, sink);
>
>   g_print ("Now playing: ");
>   gst_element_set_state (pipeline, GST_STATE_PLAYING);
>
>   g_print ("Running...\n");
>   g_main_loop_run (loop);
>
>   return 0;
> }
>
> ----
>
> I got the error:
>
> Now playing: Running...
> Error: Interner Fehler im Datenfluss.
> (sorry for the German error. it's call something like "Internal error in
> data stream")
>
> If I don't use the
>
> g_object_set (G_OBJECT (source), "program-numbers", "17501", NULL);
>
> It's running well, but I need this parameter
>
> Thanks a lot for helping!!
>
>

You need to connect to the sometimes pad generated by dvbbasebin. It
will be named program_17501

Read the chapter
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-pads.html
section 8.1.1 on how you connect to sometimes pads.

gst-launch does this work behind the scenes and that is why it works
in a gst-launch command line but not in your code.

Zaheer


More information about the gstreamer-devel mailing list