From: Marlène Hildebrand-E. <mar...@gm...> - 2009-05-12 07:16:11
|
2009/5/11 <gst...@li...> > Send gstreamer-devel mailing list submissions to > gst...@li... > > To subscribe or unsubscribe via the World Wide Web, visit > https://lists.sourceforge.net/lists/listinfo/gstreamer-devel > or, via email, send a message with subject or body 'help' to > gst...@li... > > You can reach the person managing the list at > gst...@li... > > When replying, please edit your Subject line so it is more specific > than "Re: Contents of gstreamer-devel digest..." > > > Today's Topics: > > 1. Re: [gst-cvs] gst-plugins-base: theoradec: rearrange code in > preparation for 422 and 444 support. (Michael Smith) > 2. Gstreamer contractor needed (Media Bu) > 3. Re: rtspsrc on Windows (Michael Smith) > 4. Re: Problem using gstrtpbin (Wim Taymans) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Mon, 11 May 2009 10:21:25 -0700 > From: Michael Smith <ms...@xi...> > Subject: Re: [gst-devel] [gst-cvs] gst-plugins-base: theoradec: > rearrange code in preparation for 422 and 444 support. > To: Jan Schmidt <th...@no...> > Cc: Discussion of the development of GStreamer > <gst...@li...> > Message-ID: > <3c1...@ma...> > Content-Type: text/plain; charset=ISO-8859-1 > > On Mon, May 11, 2009 at 9:54 AM, Jan Schmidt <th...@no...> wrote: > > > I'm unfreezing in a few hours anyway, so might as well leave them in. > > I'll try and make sure to leave the freeze notice in the channel topic > > next time. > > Ok. Sorry for the screwup. > > > > > For the record, the actual rule is that things unfreeze when I push the > > commit that bumps the version number in configure.ac back to > > development. > > > > The consensus seems to be that there's nothing wrong with our current > > practice apart from me forgetting to leave the IRC topic marked frozen, > > so that's cool. > > The current practice is ok with me. > > I think it'd be slightly better to branch _at release time_ (but > retain the freeze on trunk before the release). Brown-paper-bag > releases, as well as future security releases if required, would > happen from the branch. No post-release freeze would be required. So > if we were to change anything, that's what I'd suggest. > > Mike > > > > ------------------------------ > > Message: 2 > Date: Mon, 11 May 2009 10:25:19 -0700 > From: Media Bu <med...@ho...> > Subject: [gst-devel] Gstreamer contractor needed > To: <gst...@li...> > Message-ID: <BLU...@ph...l> > Content-Type: text/plain; charset="iso-8859-1" > > > 2wire, Inc., the leader in the development of consumer electronics software > for the next-generation of media platforms, has an outstanding consulting > opportunity as a GStreamer Expert in San Jose, CA. > > We are looking for a consultant with a successful track record and > expertise in the following areas: > > GStreamer development for audio & video streaming application > Set-top box development, experience working with AV decoding Soc > DVR, trick-play, time-shifting TV recording > AV standards: MPEG-2 transport, ASF, MP4, WMV, H.264, WMA, AC3 > Live TV, tuner, ATSC standard > > Required Core Skills: > > Extensive Gstreamer application and plugin development experience > HTTP/RTP/RTSP/RTCP > Linux platform development > Extensive experience working with open source > Successful delivery of multimedia product > > Please reply with resume and/or background summary of experience/expertise > along with expected bill rate. > _________________________________________________________________ > Hotmail? has a new way to see what's up with your friends. > > http://windowslive.com/Tutorial/Hotmail/WhatsNew?ocid=TXT_TAGLM_WL_HM_Tutorial_WhatsNew1_052009 > -------------- next part -------------- > An HTML attachment was scrubbed... > > ------------------------------ > > Message: 3 > Date: Mon, 11 May 2009 10:31:48 -0700 > From: Michael Smith <ms...@xi...> > Subject: Re: [gst-devel] rtspsrc on Windows > To: Discussion of the development of GStreamer > <gst...@li...> > Message-ID: > <3c1...@ma...> > Content-Type: text/plain; charset=ISO-8859-1 > > 2009/5/11 Marl?ne Hildebrand-Ehrhardt < > mar...@gm...>: > > Hi, > > > > I have a problem : I am trying to launch a rtsp server on Windows with > > gst-launch, but everytime, it crashes after a few minutes. The console > sends > > me a warning, indicating that it could not read from source, and then it > > tells me that the server closed the connection and that it got an EOS > from > > the element "pipeline0". > > Did you write an rtsp server as a gstreamer element? GStreamer doesn't > come with anything to do RTSP serving that you could run with > gst-launch. > > Please provide details about what you're _actually_ doing. > > Also mention which versions you're using (and which version of windows). > > Mike Thank you for answering me, Mike. I'm using gst-launch-0.10, version 0.10.22 with Gstreamer 0.10.22. I'm working on Windows XP professionnal, version 2002, SP2. In fact, I'm building a rtsp server with the following command line : gst-launch-0.10.exe -v rtspsrc location=rtsp://(IP adress of my IP camera)/mpeg4/media.amp ! queue ! decodebin ! queue ! videorate ! capsfilter caps="video/x-raw-yuv" ! theoraenc ! rtptheorapay ! .send_rtp_sink gstrtpsession name=session .send_rtp_src ! udpsink port=5000 host=(IP adress of the client) session.send_rtcp_src ! udpsink port=5001 host=(IP adress of the client) My aim is to stream the video from an IP camera. Don't hesitate to ask to provide more details, if necessary! Plus, I'm french, so excuse-me if I might not immediatly understand what you are asking me. Again, thank you by advance! Marlène > > > > > ------------------------------ > > Message: 4 > Date: Mon, 11 May 2009 19:58:59 +0200 > From: Wim Taymans <wim...@gm...> > Subject: Re: [gst-devel] Problem using gstrtpbin > To: Discussion of the development of GStreamer > <gst...@li...> > Message-ID: <1242064739.4809.166.camel@metal> > Content-Type: text/plain; charset="UTF-8" > > On Mon, 2009-05-11 at 14:19 -0300, Tiago Katcipis wrote: > > but the ssrc is being created, why does the pad not? i get all the > > msgs the pipeline sends and print them all and i get no error, i > > already made a test with just a udpsrc ! filesink and the data is > > comming. > > Because those signals are emitted when a source is created in the > session, which happens before the various pt/ssrc demuxers add the pad > to gstrtpbin. > > Wim > > > > > On Mon, May 11, 2009 at 2:06 PM, Wim Taymans <wim...@gm...> > > wrote: > > On Mon, 2009-05-11 at 13:55 -0300, Tiago Katcipis wrote: > > > i still didnt the teste, but i found this > > > > > > > > > > > Sometimes (dynamic pads) on elements *always* get notified to > > you with > > the "pad-added" callback. This is a signal on GstElement. You > > will get > > the newly created pads from gstrtpbin with this signal. The > > other > > signals you are trying to connect to are for something else. > > > > Wim > > > > > > > > > > http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpssrcdemux.html#GstRtpSsrcDemux-new-ssrc-pad > > > > > > the GstRtpSsrcDemux sends the signal, i tried to get the > > signal from > > > the bin with: > > > > > > g_signal_connect (rtp_bin, "new-ssrc-pad", G_CALLBACK > > > (on_new_ssrc_pad), rtp_decoder); > > > > > > but i didnt got the signal. > > > > > > My question is, i can get the signal from an element inside > > the bin > > > from the bin or i have to retrieve the element from the bin > > and then > > > connect? and if i have to get the element from the bin (in > > this case > > > the GstRtpSsrcDemux), how is the cleanest way of doing > > this? > > > > > > thanks for all the help. > > > Best regards, > > > Katcipis > > > > > > here goes the src: > > > > > > #include <gst/gst.h> > > > #include <glib.h> > > > > > > #define PORTA_UDP_ENTRADA 5000 > > > > > > 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: > > > g_print("Tipo da mensagem [%d], Nome da mensagem [% > > s]\n", > > > GST_MESSAGE_TYPE (msg), GST_MESSAGE_TYPE_NAME(msg)); > > > break; > > > } > > > > > > return TRUE; > > > } > > > > > > > > > static void > > > on_new_ssrc (GstElement* gstrtpbin, > > > guint session, > > > guint ssrc, > > > gpointer data) > > > { > > > GstPad* sinkpad; > > > GstPad* srcpad[1]; > > > GstElement* decoder = (GstElement *) data; > > > GstIterator* iter; > > > gint done, linked, iter_count; > > > > > > g_print ("New session stabilished, linking gstrtpbin > > session src pad > > > to the rtp_decoder\n"); > > > > > > sinkpad = gst_element_get_static_pad(decoder, "sink"); > > > // TODO Esta dificil de pegar o pad src do gstrtpbin que > > eh criado > > > ao iniciar uma sessao nova. > > > if(!sinkpad){ > > > g_warning("Error getting rtp_decoder sink pad"); > > > return; > > > } > > > /* > > > unique pad recv_rtp_src_%d_%d_%d on gstrtpbin with the > > session > > > number, SSRC and payload type respectively as the pad name. > > > > > > > > > http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpbin.html > > > */ > > > > > > iter = gst_element_iterate_src_pads(gstrtpbin); > > > if(!iter){ > > > g_warning("Error getting gstrtpbin pads iterator"); > > > return; > > > } > > > > > > done = FALSE; > > > linked = FALSE; > > > iter_count = 0; > > > > > > while (!done) { > > > switch (gst_iterator_next (iter, (gpointer *) srcpad)) > > { > > > case GST_ITERATOR_OK: > > > if(gst_pad_link (*srcpad, sinkpad) != > > GST_PAD_LINK_OK){ > > > g_warning("Error linking gstrtpbin pad[%s] > > to > > > rtp_decoder pad[%s]", gst_pad_get_name(*srcpad), > > > gst_pad_get_name(sinkpad)); > > > }else{ > > > g_warning("Linked gstrtpbin pad[%s] to > > rtp_decoder > > > pad[%s] with success", gst_pad_get_name(*srcpad), > > > gst_pad_get_name(sinkpad)); > > > linked = TRUE; > > > } > > > iter_count++; > > > gst_object_unref (*srcpad); > > > break; > > > case GST_ITERATOR_RESYNC: > > > gst_iterator_resync (iter); > > > break; > > > case GST_ITERATOR_ERROR: > > > done = TRUE; > > > break; > > > case GST_ITERATOR_DONE: > > > done = TRUE; > > > break; > > > } > > > } > > > if(!linked){ > > > g_warning("failed to found a valid recv_src_pad on > > gstrtpbin"); > > > } > > > g_debug("GstRtpBin has [%d] src pads", iter_count); > > > > > > gst_iterator_free (iter); > > > gst_object_unref (sinkpad); > > > } > > > > > > static void > > > on_new_ssrc_pad (GstElement *element, > > > GstPad *pad, > > > guint ssrc, > > > gpointer data) > > > { > > > GstPad *sinkpad; > > > GstElement *decoder = (GstElement *) data; > > > > > > /* We can now link this pad with the converter sink pad */ > > > g_print ("Dynamic ssrc pad created, linking the pad to the > > > rtp_decoder\n"); > > > > > > sinkpad = gst_element_get_static_pad (decoder, "sink"); > > > if(gst_pad_link (pad, sinkpad) != GST_PAD_LINK_OK){ > > > gchar* name = gst_pad_get_name(pad); > > > g_warning("Error linking the pad[%s] to rtp_decoder > > sinkpad", > > > name); > > > g_free(name); > > > } > > > > > > gst_object_unref (sinkpad); > > > } > > > > > > int > > > main (int argc, > > > char *argv[]) > > > { > > > GMainLoop *loop; > > > > > > GstElement *pipeline, *source, *rtp_bin, *rtp_decoder, > > *sink; > > > GstPad *gstrtp_sink_pad; > > > GstBus *bus; > > > > > > /* Initialisation */ > > > gst_init (&argc, &argv); > > > > > > loop = g_main_loop_new (NULL, FALSE); > > > > > > /* Create gstreamer elements */ > > > pipeline = gst_pipeline_new ("audio-player"); > > > source = gst_element_factory_make > > ("udpsrc","udp-source"); > > > rtp_bin = gst_element_factory_make ("gstrtpbin", > > "gst_rtpbin"); > > > rtp_decoder = gst_element_factory_make ("rtpL16depay", > > > "rtp_decoder"); > > > sink = gst_element_factory_make ("filesink", > > "file-sink"); > > > > > > if (!pipeline || !source || !sink || !rtp_decoder || ! > > rtp_bin) { > > > g_printerr ("One element could not be created. > > Exiting.\n"); > > > return -1; > > > } > > > > > > gstrtp_sink_pad = gst_element_get_request_pad(rtp_bin, > > > "recv_rtp_sink_0"); > > > if (!gstrtp_sink_pad) { > > > g_printerr ("Sink pad could not be created. > > Exiting.\n"); > > > return -1; > > > } > > > > > > /* Set up the pipeline */ > > > g_object_set (G_OBJECT (source), "port", > > PORTA_UDP_ENTRADA , NULL); > > > g_object_set (G_OBJECT (sink), "location", > > "dados_recebidos_rtp" , > > > 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 */ > > > /* file-source | ogg-demuxer | vorbis-decoder | converter > > | > > > alsa-output */ > > > gst_bin_add_many (GST_BIN (pipeline), > > > source, sink, rtp_bin, rtp_decoder, > > NULL); > > > > > > /* we link the elements together */ > > > if(gst_pad_link(gst_element_get_static_pad(source, "src"), > > > gstrtp_sink_pad) != GST_PAD_LINK_OK){ > > > g_warning("Error linking source to the > > gstrtp_sink_pad"); > > > gst_object_unref (GST_OBJECT (pipeline)); > > > return 0; > > > } > > > > > > /* > > > After the packets are released from the jitterbuffer, > > they will be > > > forwarded to a GstRtpsSrcDemux element. > > > The GstRtpsSrcDemux element will demux the packets based > > on the > > > payload type and will create a unique pad > > > recv_rtp_src_%d_%d_%d on gstrtpbin with the session > > number, SSRC > > > and payload type respectively as the pad name. > > > Because of that we have to dinamicaly link the src pads > > on > > > runtime. > > > */ > > > g_signal_connect (rtp_bin, "new-ssrc-pad", G_CALLBACK > > > (on_new_ssrc_pad), rtp_decoder); > > > g_signal_connect (rtp_bin, "on-new-ssrc", G_CALLBACK > > (on_new_ssrc), > > > rtp_decoder); > > > > > > if(!gst_element_link (rtp_decoder, sink)){ > > > g_warning("Error linking the rtp_decoder to the > > sink"); > > > gst_object_unref (GST_OBJECT (pipeline)); > > > return -1; > > > } > > > > > > /* Set the pipeline to "playing" state*/ > > > g_print ("listening on port: %d\n", PORTA_UDP_ENTRADA); > > > 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 listening on port\n"); > > > gst_element_set_state (pipeline, GST_STATE_NULL); > > > > > > g_print ("Deleting pipeline\n"); > > > gst_object_unref (GST_OBJECT (pipeline)); > > > > > > return 0; > > > } > > > > > > > > > On Sat, May 9, 2009 at 3:40 PM, Aurelien Grimaud > > <gs...@ya...> > > > wrote: > > > Sorry, I misread your code. > > > the pad-added signal is a signal of elements, > > documented in > > > the element > > > documentation. > > > Do you receive RTP ? > > > Because the pad wont be created if you do not > > receive RTP. > > > What does tcpdump tell ? > > > > > > Aurelien > > > Tiago Katcipis a ?crit : > > > > > > > i did it, the pad never is created :-(, but i get > > no message > > > of > > > > warning or error neither. And on the list of > > signals of the > > > gstrtpbin > > > > there is no "pad-added" signal, its normal to the > > signal > > > dont be there? > > > > * > > > > g_signal_connect (rtp_bin, "pad-added", > > G_CALLBACK > > > (on_pad_added), > > > > rtp_decoder);* > > > > > > > > On Sat, May 9, 2009 at 3:55 AM, Aurelien Grimaud > > > <gs...@ya... > > > > > > > > > > <mailto:gs...@ya...>> wrote: > > > > > > > > You should add the pad-added signal on the > > rtpbin. > > > > When it triggers, check the pad name to find > > out which > > > pad it is. > > > > If pad is a recv_rtp_src_%d_%d_%d, link your > > decoder and > > > sink in the > > > > call back. > > > > > > > > Aurelien > > > > > > > > Tiago Katcipis a ?crit : > > > > > Im trying to do a rtp stream sending data > > and another > > > side receiving > > > > > the data, the part that sends the data is > > working > > > fine, but the part > > > > > that receives is giving me a lot of trouble. > > At > > > > > > > > > > > > > > > http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpbin.html > > > > > i have read: > > > > > > > > > > "To use GstRtpBin > > > > > > > > > > > > > > < > http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpbin.html#GstRtpBin > > > > > > > as an RTP receiver, request a recv_rtp_sink_ > > %|d| pad. > > > The session > > > > > number must be specified in the pad name. > > Data > > > received on the > > > > > recv_rtp_sink_%|d| pad will be processed in > > the > > > gstrtpsession > > > > manager > > > > > and after being validated forwarded on > > GstRtpsSrcDemux > > > element. Each > > > > > RTP stream is demuxed based on the SSRC and > > send to a > > > > > GstRtpJitterBuffer > > > > > > > > > > > > > > < > http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpjitterbuffer.html#GstRtpJitterBuffer > >. > > > > > After the packets are released from the > > jitterbuffer, > > > they will be > > > > > forwarded to a GstRtpsSrcDemux element. The > > > GstRtpsSrcDemux element > > > > > will demux the packets based on the payload > > type and > > > will create a > > > > > unique pad recv_rtp_src_%|d_|%|d_|%|d| on > > gstrtpbin > > > with the session > > > > > number, SSRC and payload type respectively > > as the pad > > > name. " > > > > > > > > > > on my application i cant get the > > recv_rtp_src_%|d_|%| > > > d_|%|d, |i > > > > > already tried on a lot of ways, my last shot > > was try > > > to iterate over > > > > > all the pads on the bin and try to conect, i > > > discovered that the src > > > > > pad never shows up. No error is given. I can > > get the > > > on-new-ssrc > > > > > signal...and other signals as | > > on-ssrc-validated... > > > but on all this > > > > > signals the | recv_rtp_src_%|d_|%|d_|%|d is > > not > > > created yet, i also > > > > > tried to get the "on-pad-added" signal but > > this signal > > > never > > > > happens|. > > > > > > > > > > My problem is, when the recv_rtp_src_%|d_|%| > > d_|%|d is > > > created|. > > > > When i > > > > > iterate over the pads i always get a > > > > > ** (teste_rtp:9516): DEBUG: GstRtpBin has > > [0] src pads > > > > > > > > > > here goes the source code, is a little messy > > because > > > im all day > > > > trying > > > > > a lot of different ways to do this. And i > > get no error > > > message. > > > > > > > > > > #include <gst/gst.h> > > > > > #include <glib.h> > > > > > > > > > > #define PORTA_UDP_ENTRADA 5000 > > > > > > > > > > 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: > > > > > g_print("Tipo da mensagem [%d], Nome > > da mensagem > > > [%s]\n", > > > > > GST_MESSAGE_TYPE (msg), > > GST_MESSAGE_TYPE_NAME(msg)); > > > > > break; > > > > > } > > > > > > > > > > return TRUE; > > > > > } > > > > > > > > > > > > > > > static void > > > > > on_new_ssrc (GstElement* gstrtpbin, > > > > > guint session, > > > > > guint ssrc, > > > > > gpointer data) > > > > > { > > > > > GstPad* sinkpad; > > > > > GstPad* srcpad[1]; > > > > > GstElement* decoder = (GstElement *) data; > > > > > GstIterator* iter; > > > > > gint done, linked, iter_count; > > > > > > > > > > g_print ("New session stabilished, linking > > gstrtpbin > > > session > > > > src pad > > > > > to the rtp_decoder\n"); > > > > > > > > > > sinkpad = > > gst_element_get_static_pad(decoder, > > > "sink"); > > > > > // TODO Esta dificil de pegar o pad src do > > gstrtpbin > > > que eh criado > > > > > ao iniciar uma sessao nova. > > > > > if(!sinkpad){ > > > > > g_warning("Error getting rtp_decoder > > sink pad"); > > > > > return; > > > > > } > > > > > /* > > > > > unique pad recv_rtp_src_%d_%d_%d on > > gstrtpbin > > > with the session > > > > > number, SSRC and payload type respectively > > as the pad > > > name. > > > > > > > > > > > > > > > > > > > > http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-bad-plugins/html/gst-plugins-bad-plugins-gstrtpbin.html > > > > > */ > > > > > > > > > > iter = > > gst_element_iterate_src_pads(gstrtpbin); > > > > > if(!iter){ > > > > > g_warning("Error getting gstrtpbin > > pads > > > iterator"); > > > > > return; > > > > > } > > > > > > > > > > done = FALSE; > > > > > linked = FALSE; > > > > > iter_count = 0; > > > > > > > > > > while (!done) { > > > > > switch (gst_iterator_next (iter, > > (gpointer *) > > > srcpad)) { > > > > > case GST_ITERATOR_OK: > > > > > if(gst_pad_link (*srcpad, > > sinkpad) != > > > > GST_PAD_LINK_OK){ > > > > > g_warning("Error linking > > gstrtpbin > > > pad[%s] to > > > > > rtp_decoder pad[%s]", > > gst_pad_get_name(*srcpad), > > > > > gst_pad_get_name(sinkpad)); > > > > > }else{ > > > > > g_warning("Linked > > gstrtpbin pad[%s] > > > to rtp_decoder > > > > > pad[%s] with success", > > gst_pad_get_name(*srcpad), > > > > > gst_pad_get_name(sinkpad)); > > > > > linked = TRUE; > > > > > } > > > > > iter_count++; > > > > > gst_object_unref (*srcpad); > > > > > break; > > > > > case GST_ITERATOR_RESYNC: > > > > > gst_iterator_resync (iter); > > > > > break; > > > > > case GST_ITERATOR_ERROR: > > > > > done = TRUE; > > > > > break; > > > > > case GST_ITERATOR_DONE: > > > > > done = TRUE; > > > > > break; > > > > > } > > > > > } > > > > > if(!linked){ > > > > > g_warning("failed to found a valid > > recv_src_pad > > > on > > > > gstrtpbin"); > > > > > } > > > > > g_debug("GstRtpBin has [%d] src pads", > > iter_count); > > > > > > > > > > gst_iterator_free (iter); > > > > > gst_object_unref (sinkpad); > > > > > } > > > > > > > > > > static void > > > > > on_pad_added (GstElement *element, > > > > > GstPad *pad, > > > > > gpointer data) > > > > > { > > > > > GstPad *sinkpad; > > > > > GstElement *decoder = (GstElement *) data; > > > > > > > > > > /* We can now link this pad with the > > converter sink > > > pad */ > > > > > g_print ("Dynamic pad created, linking > > > wavparser/converter\n"); > > > > > > > > > > sinkpad = gst_element_get_static_pad > > (decoder, > > > "sink"); > > > > > if(gst_pad_link (pad, sinkpad) != > > GST_PAD_LINK_OK){ > > > > > g_warning("Error linking recv_rtp_src > > pad to > > > sinkpad"); > > > > > } > > > > > gst_object_unref (sinkpad); > > > > > } > > > > > > > > > > int > > > > > main (int argc, > > > > > char *argv[]) > > > > > { > > > > > GMainLoop *loop; > > > > > > > > > > GstElement *pipeline, *source, *rtp_bin, > > > *rtp_decoder, *sink; > > > > > GstPad *gstrtp_sink_pad; > > > > > GstBus *bus; > > > > > > > > > > /* Initialisation */ > > > > > gst_init (&argc, &argv); > > > > > > > > > > loop = g_main_loop_new (NULL, FALSE); > > > > > > > > > > /* Create gstreamer elements */ > > > > > pipeline = gst_pipeline_new > > ("audio-player"); > > > > > source = gst_element_factory_make > > > ("udpsrc","udp-source"); > > > > > rtp_bin = gst_element_factory_make > > ("gstrtpbin", > > > > "gst_rtpbin"); > > > > > rtp_decoder = gst_element_factory_make > > > ("rtpL16depay", > > > > "rtp_decoder"); > > > > > sink = gst_element_factory_make > > ("filesink", > > > "file-sink"); > > > > > > > > > > if (!pipeline || !source || !sink || ! > > rtp_decoder > > > || !rtp_bin) { > > > > > g_printerr ("One element could not be > > created. > > > Exiting.\n"); > > > > > return -1; > > > > > } > > > > > > > > > > gstrtp_sink_pad = > > > gst_element_get_request_pad(rtp_bin, > > > > > "recv_rtp_sink_0"); > > > > > if (!gstrtp_sink_pad) { > > > > > g_printerr ("Sink pad could not be > > created. > > > Exiting.\n"); > > > > > return -1; > > > > > } > > > > > > > > > > /* Set up the pipeline */ > > > > > g_object_set (G_OBJECT (source), "port", > > > PORTA_UDP_ENTRADA , > > > > NULL); > > > > > g_object_set (G_OBJECT (sink), "location", > > > "dados_recebidos_rtp" , > > > > > 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 > > */ > > > > > /* file-source | ogg-demuxer | > > vorbis-decoder | > > > converter | > > > > > alsa-output */ > > > > > gst_bin_add_many (GST_BIN (pipeline), > > > > > source, sink, rtp_bin, > > > rtp_decoder, NULL); > > > > > > > > > > /* we link the elements together */ > > > > > > > if(gst_pad_link(gst_element_get_static_pad(source, > > > "src"), > > > > > gstrtp_sink_pad) != GST_PAD_LINK_OK){ > > > > > g_warning("Error linking source to the > > > gstrtp_sink_pad"); > > > > > gst_object_unref (GST_OBJECT > > (pipeline)); > > > > > return 0; > > > > > } > > > > > > > > > > /* > > > > > After the packets are released from the > > > jitterbuffer, they > > > > will be > > > > > forwarded to a GstRtpsSrcDemux element. > > > > > The GstRtpsSrcDemux element will demux > > the packets > > > based on the > > > > > payload type and will create a unique pad > > > > > recv_rtp_src_%d_%d_%d on gstrtpbin with > > the > > > session number, SSRC > > > > > and payload type respectively as the pad > > name. > > > > > Because of that we have to dinamicaly > > link the src > > > pads on > > > > runtime. > > > > > */ > > > > > g_signal_connect (rtp_bin, "pad-added", > > G_CALLBACK > > > > (on_pad_added), > > > > > rtp_decoder); > > > > > g_signal_connect (rtp_bin, "on-new-ssrc", > > G_CALLBACK > > > > (on_new_ssrc), > > > > > rtp_decoder); > > > > > > > > > > if(!gst_element_link (rtp_decoder, sink)){ > > > > > g_warning("Error linking the > > rtp_decoder to the > > > sink"); > > > > > gst_object_unref (GST_OBJECT > > (pipeline)); > > > > > return -1; > > > > > } > > > > > > > > > > /* Set the pipeline to "playing" state*/ > > > > > g_print ("listening on port: %d\n", > > > PORTA_UDP_ENTRADA); > > > > > 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 listening on > > port\n"); > > > > > gst_element_set_state (pipeline, > > GST_STATE_NULL); > > > > > > > > > > g_print ("Deleting pipeline\n"); > > > > > gst_object_unref (GST_OBJECT (pipeline)); > > > > > > > > > > return 0; > > > > > } > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------------------------ > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------------------------------ > > > > > The NEW KODAK i700 Series Scanners deliver > > under ANY > > > > circumstances! Your > > > > > production scanning environment may not be a > > perfect > > > world - but > > > > thanks to > > > > > Kodak, there's a perfect scanner to get the > > job done! > > > With the > > > > NEW KODAK i700 > > > > > Series Scanner you'll get full speed at 300 > > dpi even > > > with all image > > > > > processing features enabled. > > > http://p.sf.net/sfu/kodak-com > > > > > > > > > > > > > > > ------------------------------------------------------------------------ > > > > > > > > > > > > _______________________________________________ > > > > > gstreamer-devel mailing list > > > > > gst...@li... > > > > > > > <mailto:gst...@li...> > > > > > > > > > > https://lists.sourceforge.net/lists/listinfo/gstreamer-devel > > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------------------------------ > > > > The NEW KODAK i700 Series Scanners deliver > > under ANY > > > > circumstances! Your > > > > production scanning environment may not be a > > perfect > > > world - but > > > > thanks to > > > > Kodak, there's a perfect scanner to get the > > job done! > > > With the NEW > > > > KODAK i700 > > > > Series Scanner you'll get full speed at 300 > > dpi even > > > with all image > > > > processing features enabled. > > > http://p.sf.net/sfu/kodak-com > > > > > > _______________________________________________ > > > > gstreamer-devel mailing list > > > > gst...@li... > > > > > > > <mailto:gst...@li...> > > > > > > > > > > > > https://lists.sourceforge.net/lists/listinfo/gstreamer-devel > > > > > > > > > > > > > > > > > > > > -- > > > > "it might be a profitable thing to learn Java, but > > it has no > > > > intellectual value whatsoever" Alexander Stepanov > > > > > > > > > > ------------------------------------------------------------------------ > > > > > > > > > > > > > > ------------------------------------------------------------------------------ > > > > The NEW KODAK i700 Series Scanners deliver under > > ANY > > > circumstances! Your > > > > production scanning environment may not be a > > perfect world - > > > but thanks to > > > > Kodak, there's a perfect scanner to get the job > > done! With > > > the NEW KODAK i700 > > > > Series Scanner you'll get full speed at 300 dpi > > even with > > > all image > > > > processing features enabled. > > http://p.sf.net/sfu/kodak-com > > > > > > > > > > ------------------------------------------------------------------------ > > > > > > > > _______________________________________________ > > > > gstreamer-devel mailing list > > > > gst...@li... > > > > > > https://lists.sourceforge.net/lists/listinfo/gstreamer-devel > > > > > > > > > > > > > > > > ------------------------------------------------------------------------------ > > > The NEW KODAK i700 Series Scanners deliver under ANY > > > circumstances! Your > > > production scanning environment may not be a perfect > > world - > > > but thanks to > > > Kodak, there's a perfect scanner to get the job > > done! With the > > > NEW KODAK i700 > > > Series Scanner you'll get full speed at 300 dpi even > > with all > > > image > > > processing features enabled. > > http://p.sf.net/sfu/kodak-com > > > _______________________________________________ > > > gstreamer-devel mailing list > > > gst...@li... > > > > > https://lists.sourceforge.net/lists/listinfo/gstreamer-devel > > > > > > > > > > > > > > > -- > > > "it might be a profitable thing to learn Java, but it has no > > > intellectual value whatsoever" Alexander Stepanov > > > > > > ------------------------------------------------------------------------------ > > > The NEW KODAK i700 Series Scanners deliver under ANY > > circumstances! Your > > > production scanning environment may not be a perfect world - > > but thanks to > > > Kodak, there's a perfect scanner to get the job done! With > > the NEW KODAK i700 > > > Series Scanner you'll get full speed at 300 dpi even with > > all image > > > processing features enabled. http://p.sf.net/sfu/kodak-com > > > _______________________________________________ > > gstreamer-devel mailing list > > gst...@li... > > https://lists.sourceforge.net/lists/listinfo/gstreamer-devel > > > > > > > ------------------------------------------------------------------------------ > > The NEW KODAK i700 Series Scanners deliver under ANY > > circumstances! Your > > production scanning environment may not be a perfect world - > > but thanks to > > Kodak, there's a perfect scanner to get the job done! With the > > NEW KODAK i700 > > Series Scanner you'll get full speed at 300 dpi even with all > > image > > processing features enabled. http://p.sf.net/sfu/kodak-com > > _______________________________________________ > > gstreamer-devel mailing list > > gst...@li... > > https://lists.sourceforge.net/lists/listinfo/gstreamer-devel > > > > > > > > > > -- > > "it might be a profitable thing to learn Java, but it has no > > intellectual value whatsoever" Alexander Stepanov > > > ------------------------------------------------------------------------------ > > The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your > > production scanning environment may not be a perfect world - but thanks > to > > Kodak, there's a perfect scanner to get the job done! With the NEW KODAK > i700 > > Series Scanner you'll get full speed at 300 dpi even with all image > > processing features enabled. http://p.sf.net/sfu/kodak-com > > _______________________________________________ gstreamer-devel mailing > list gst...@li... > https://lists.sourceforge.net/lists/listinfo/gstreamer-devel > > > > > ------------------------------ > > > ------------------------------------------------------------------------------ > The NEW KODAK i700 Series Scanners deliver under ANY circumstances! Your > production scanning environment may not be a perfect world - but thanks to > Kodak, there's a perfect scanner to get the job done! With the NEW KODAK > i700 > Series Scanner you'll get full speed at 300 dpi even with all image > processing features enabled. http://p.sf.net/sfu/kodak-com > > ------------------------------ > > _______________________________________________ > gstreamer-devel mailing list > gst...@li... > https://lists.sourceforge.net/lists/listinfo/gstreamer-devel > > > End of gstreamer-devel Digest, Vol 36, Issue 42 > *********************************************** > |