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