sending audio/video on RTP with C API

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

sending audio/video on RTP with C API

pierre.crepieux
Hi,

I'm trying to write a simple C program that sends webcam/microphone streams on rtp with gstrtpbin.
I gave a look at the provided server-alsasrc-PCMA.c test program and mimics it to add h264 stream to the rtpbin (just like server-v4l2-H264-alsasrc-PCMA.sh does).
Sadly, using VLC to receive the streams, give me a fixed image and a pretty bad sound (delay, sometime stop/restart,...).
Are there any tricks to be aware of for doing this translation of gst-launch pipe definition to C code ? Does gstrtpbin require subtle manipulations (that gst-launch would do behind the scene ... ??? ) to operate with 2 rtp stream ?

Pierre
--

CREPIEUX Pierre RD-SIRP-LAN
LAN/SIRP/ASF
Tel : +33 296053490
[hidden email]
R&D Lannion 2, avenue Pierre Marzin 22307 LANNION Cedex - France


Mailer ThunderBird sous YourDev Linux
Installez simplement votre poste de travail Linux avec http://web2000.rd.francetelecom.fr




------------------------------------------------------------------------------
Gaining the trust of online customers is vital for the success of any company
that requires sensitive data to be transmitted over the Web.   Learn how to
best implement a security strategy that keeps consumers' information secure
and instills the confidence they need to proceed with transactions.
http://p.sf.net/sfu/oracle-sfdevnl 
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: sending audio/video on RTP with C API

Edward Hervey
Administrator
On Fri, 2011-01-07 at 11:36 +0100, [hidden email]
wrote:

> Hi,
>
> I'm trying to write a simple C program that sends webcam/microphone
> streams on rtp with gstrtpbin.
> I gave a look at the provided server-alsasrc-PCMA.c test program and
> mimics it to add h264 stream to the rtpbin (just like
> server-v4l2-H264-alsasrc-PCMA.sh does).
> Sadly, using VLC to receive the streams, give me a fixed image and a
> pretty bad sound (delay, sometime stop/restart,...).
> Are there any tricks to be aware of for doing this translation of
> gst-launch pipe definition to C code ? Does gstrtpbin require subtle
> manipulations (that gst-launch would do behind the scene ... ??? ) to
> operate with 2 rtp stream ?

  You might want to use gst-rtsp-server instead. It does all the magic
for you.

    Edward

>
> Pierre
> --
>
> CREPIEUX Pierre RD-SIRP-LAN
> LAN/SIRP/ASF
> Tel : +33 296053490
> Email: [hidden email]
> R&D Lannion 2, avenue Pierre Marzin 22307 LANNION Cedex - France
>
>
> Mailer ThunderBird sous YourDev Linux
> Installez simplement votre poste de travail Linux avec
> http://web2000.rd.francetelecom.fr
>
>
>
>
> ------------------------------------------------------------------------------
> Gaining the trust of online customers is vital for the success of any company
> that requires sensitive data to be transmitted over the Web.   Learn how to
> best implement a security strategy that keeps consumers' information secure
> and instills the confidence they need to proceed with transactions.
> http://p.sf.net/sfu/oracle-sfdevnl 
> _______________________________________________ gstreamer-devel mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/gstreamer-devel



------------------------------------------------------------------------------
Gaining the trust of online customers is vital for the success of any company
that requires sensitive data to be transmitted over the Web.   Learn how to
best implement a security strategy that keeps consumers' information secure
and instills the confidence they need to proceed with transactions.
http://p.sf.net/sfu/oracle-sfdevnl 
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: sending audio/video on RTP with C API

Miguel Telleria de Esteban
In reply to this post by pierre.crepieux
Hello,

Like you are doing now, I followed the same goal of using gstrtpbin and
found many small nuances.

You can find here an implementation that I did to send ogg (vorbis and
theora) audio through RTP using gstrtpbin.

http://www.ctr.unican.es/asignaturas/dec/Doc/ogg_audio_video_rtp_sender_receiver.tar.gz

Hope it helps.

And yes, I plan to submit it as a bugzilla addition sometime in the
future :).

        Miguel


On Fri, 07 Jan 2011 11:36:46 +0100 pierre.crepieux
wrote:

> Hi,
>
> I'm trying to write a simple C program that sends webcam/microphone
> streams on rtp with gstrtpbin. I gave a look at the provided
> server-alsasrc-PCMA.c test program and mimics it to add h264 stream
> to the rtpbin (just like server-v4l2-H264-alsasrc-PCMA.sh does).
> Sadly, using VLC to receive the streams, give me a fixed image and a
> pretty bad sound (delay, sometime stop/restart,...). Are there any
> tricks to be aware of for doing this translation of gst-launch pipe
> definition to C code ? Does gstrtpbin require subtle manipulations
> (that gst-launch would do behind the scene ... ??? ) to operate with
> 2 rtp stream ?
>
> Pierre
> --
>
> CREPIEUX Pierre RD-SIRP-LAN
> LAN/SIRP/ASF
> Tel : +33 296053490
> Email: [hidden email]
> R&D Lannion 2, avenue Pierre Marzin 22307 LANNION Cedex - France
>
>
> Mailer ThunderBird sous YourDev Linux
> Installez simplement votre poste de travail Linux avec
> http://web2000.rd.francetelecom.fr
>
>
>

--

      (O-O)
---oOO-(_)-OOo-----------------------------------------------------
 Miguel TELLERIA DE ESTEBAN               http://www.mtelleria.com
 Email: miguel at mtelleria.com           Tel GSM:  +34 650 801098
                                          Tel Fix:  +34 942 280174

 Miembro de http://www.linuca.org    Membre du http://www.bxlug.be
 ¿Usuario captivo o libre?    http://www.obtengalinux.org/windows/
 Free or  captive user?        http://www.getgnulinux.org/windows/
-------------------------------------------------------------------


------------------------------------------------------------------------------
Gaining the trust of online customers is vital for the success of any company
that requires sensitive data to be transmitted over the Web.   Learn how to
best implement a security strategy that keeps consumers' information secure
and instills the confidence they need to proceed with transactions.
http://p.sf.net/sfu/oracle-sfdevnl 
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel

signature.asc (205 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: sending audio/video on RTP with C API

pierre.crepieux
In reply to this post by Edward Hervey
Edward Hervey a écrit :
On Fri, 2011-01-07 at 11:36 +0100, [hidden email]
wrote:
  
Hi, 

I'm trying to write a simple C program that sends webcam/microphone
streams on rtp with gstrtpbin. 
I gave a look at the provided server-alsasrc-PCMA.c test program and
mimics it to add h264 stream to the rtpbin (just like
server-v4l2-H264-alsasrc-PCMA.sh does). 
Sadly, using VLC to receive the streams, give me a fixed image and a
pretty bad sound (delay, sometime stop/restart,...). 
Are there any tricks to be aware of for doing this translation of
gst-launch pipe definition to C code ? Does gstrtpbin require subtle
manipulations (that gst-launch would do behind the scene ... ??? ) to
operate with 2 rtp stream ? 
    

  You might want to use gst-rtsp-server instead. It does all the magic
for you.
  
Sure but in fact, I'd like to have an insight of the "magic" involved in this case. What I'm trying to do at the moment is to get a canonical exemple of working code.
gst-rtsp-server appears to be a feature complete - hence complex piece of code (I'm not much experimented with gstreamer).
Aren't there any resource that could help me writing a minimal source code and understand it ?
Is digging gst-rtsp-server source code the best option I have ?
Eventually, could you (or someone else) point me the places where I have to pay attention to get something runnable (bus state changes, dynamic pad, ...)

    Edward

------------------------------------------------------------------------------
Gaining the trust of online customers is vital for the success of any company
that requires sensitive data to be transmitted over the Web.   Learn how to 
best implement a security strategy that keeps consumers' information secure 
and instills the confidence they need to proceed with transactions.
http://p.sf.net/sfu/oracle-sfdevnl 
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
  

Pierre

------------------------------------------------------------------------------
Gaining the trust of online customers is vital for the success of any company
that requires sensitive data to be transmitted over the Web.   Learn how to
best implement a security strategy that keeps consumers' information secure
and instills the confidence they need to proceed with transactions.
http://p.sf.net/sfu/oracle-sfdevnl 
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: sending audio/video on RTP with C API

pierre.crepieux
In reply to this post by Miguel Telleria de Esteban
Thanks,

I gave a look at your code, and found it instructive. It didn't really
highlight the problem I had (i'm using dshow and directsound src), but
anyway, I got my sample working :-)  There is still one thing i don't
get: my sample works if I use h263 encoding but doesn't with h264 ...

I still have many thing to learn regarding gstreamer !


Miguel Telleria de Esteban a écrit :

> Hello,
>
> Like you are doing now, I followed the same goal of using gstrtpbin and
> found many small nuances.
>
> You can find here an implementation that I did to send ogg (vorbis and
> theora) audio through RTP using gstrtpbin.
>
> http://www.ctr.unican.es/asignaturas/dec/Doc/ogg_audio_video_rtp_sender_receiver.tar.gz
>
> Hope it helps.
>
> And yes, I plan to submit it as a bugzilla addition sometime in the
> future :).
>
> Miguel
>
>
> On Fri, 07 Jan 2011 11:36:46 +0100 pierre.crepieux
> wrote:
>
>  
>> Hi,
>>
>> I'm trying to write a simple C program that sends webcam/microphone
>> streams on rtp with gstrtpbin. I gave a look at the provided
>> server-alsasrc-PCMA.c test program and mimics it to add h264 stream
>> to the rtpbin (just like server-v4l2-H264-alsasrc-PCMA.sh does).
>> Sadly, using VLC to receive the streams, give me a fixed image and a
>> pretty bad sound (delay, sometime stop/restart,...). Are there any
>> tricks to be aware of for doing this translation of gst-launch pipe
>> definition to C code ? Does gstrtpbin require subtle manipulations
>> (that gst-launch would do behind the scene ... ??? ) to operate with
>> 2 rtp stream ?
>>
>> Pierre
>> --
>>
>>    
>
> ------------------------------------------------------------------------
>
> ------------------------------------------------------------------------------
> Gaining the trust of online customers is vital for the success of any company
> that requires sensitive data to be transmitted over the Web.   Learn how to
> best implement a security strategy that keeps consumers' information secure
> and instills the confidence they need to proceed with transactions.
> http://p.sf.net/sfu/oracle-sfdevnl 
> ------------------------------------------------------------------------
>
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>  



------------------------------------------------------------------------------
Gaining the trust of online customers is vital for the success of any company
that requires sensitive data to be transmitted over the Web.   Learn how to
best implement a security strategy that keeps consumers' information secure
and instills the confidence they need to proceed with transactions.
http://p.sf.net/sfu/oracle-sfdevnl 
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: sending audio/video on RTP with C API

giorgino
 <pierre.crepieux <at> orange-ftgroup.com> writes:

Dear Pierre could you give me some suggestion about your working example with
h.263 altough like you I'm interested to work with h.264.

G.





------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: sending audio/video on RTP with C API

Tiago Katcipis


On Tue, Jan 11, 2011 at 5:59 PM, giorgino <[hidden email]> wrote:
 <pierre.crepieux <at> orange-ftgroup.com> writes:

Dear Pierre could you give me some suggestion about your working example with
h.263 altough like you I'm interested to work with h.264.

I have this small application that sends audio(G711)/video(H263):

http://gitorious.org/ufscwork/works/blobs/master/c/gstreamer/video_conf_rtp/simple.c

i tested it making a video conference linux->linux and it worked ok. The only thing missing is a gstrtpbin, there is no jitter buffer etc.

hope it helps.

best regards,
Katcipis
 

G.





------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel



--
http://www.getgnulinux.org/windows

------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: sending audio/video on RTP with C API

Brian Gitonga Marete
In reply to this post by Edward Hervey
On Fri, Jan 7, 2011 at 1:46 PM, Edward Hervey <[hidden email]> wrote:

> On Fri, 2011-01-07 at 11:36 +0100, [hidden email]
> wrote:
>> Hi,
>>
>> I'm trying to write a simple C program that sends webcam/microphone
>> streams on rtp with gstrtpbin.
>> I gave a look at the provided server-alsasrc-PCMA.c test program and
>> mimics it to add h264 stream to the rtpbin (just like
>> server-v4l2-H264-alsasrc-PCMA.sh does).
>> Sadly, using VLC to receive the streams, give me a fixed image and a
>> pretty bad sound (delay, sometime stop/restart,...).
>> Are there any tricks to be aware of for doing this translation of
>> gst-launch pipe definition to C code ? Does gstrtpbin require subtle
>> manipulations (that gst-launch would do behind the scene ... ??? ) to
>> operate with 2 rtp stream ?
>
>  You might want to use gst-rtsp-server instead. It does all the magic
> for you.
>

By this do you mean the transfer of SDP data or something more?

Thanks.

BGM.
--
Brian Gitonga Marete
Toshnix Systems
Tel: +254722151590

------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: sending audio/video on RTP with C API

pierre.crepieux
In reply to this post by giorgino


giorgino a écrit :
>  <pierre.crepieux <at> orange-ftgroup.com> writes:
>
> Dear Pierre could you give me some suggestion about your working example with
> h.263 altough like you I'm interested to work with h.264.
>
> G.
>  
Here it is. It's really a simple copy-paste of the sample provided with
the source distribution of gstreamer. I only mimic the first RTP sink to
add the second (also added a preview). I didn't tried again with h264.
Maybe there are a few more constraints this simple code doesn't handle ...
I'll tell you if I succeed.

>
>
> ------------------------------------------------------------------------------
> Protect Your Site and Customers from Malware Attacks
> Learn about various malware tactics and how to avoid them. Understand
> malware threats, the impact they can have on your business, and how you
> can protect your company and customers by using code signing.
> http://p.sf.net/sfu/oracle-sfdevnl
> _______________________________________________
> gstreamer-devel mailing list
> [hidden email]
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
>
>  

/*
#
# A simple RTP server
#
# .-------.    .-------.    .-------.      .----------.     .-------.
# |dshowsrc|   |h263enc|    |h263pay|      | rtpbin   |     |udpsink|  RTP
# |      src->sink    src->sink    src->send_rtp send_rtp->sink     | port=5000
# '-------'    '-------'    '-------'      |          |     '-------'
#                                          |          |      
#                                          |          |     .-------.
#                                          |          |     |udpsink|  RTCP
#                                          |    send_rtcp->sink     | port=5001
#                           .-------.      |          |     '-------' sync=false
#                RTCP       |udpsrc |      |          |               async=false
#              port=5005    |     src->recv_rtcp      |                      
#                           '-------'      |          |              
#                                          |          |
# .-------.    .-------.    .-------.      |          |     .-------.
# |audiosrc|   |alawenc|    |pcmapay|      | rtpbin   |     |udpsink|  RTP
# |      src->sink    src->sink    src->send_rtp send_rtp->sink     | port=5002
# '-------'    '-------'    '-------'      |          |     '-------'
#                                          |          |      
#                                          |          |     .-------.
#                                          |          |     |udpsink|  RTCP
#                                          |    send_rtcp->sink     | port=5003
#                           .-------.      |          |     '-------' sync=false
#                RTCP       |udpsrc |      |          |               async=false
#              port=5007    |     src->recv_rtcp      |                      
#                           '-------'      '----------'              
*/

#include <string.h>
#include <math.h>
#include <gst/gst.h>
 
/* change this to send the RTP data and RTCP to another host */
#define DEST_HOST "127.0.0.1"
 
/* #define AUDIO_SRC  "alsasrc" */
#define VIDEO_SRC  "dshowvideosrc"
 
/* the encoder and payloader elements */
#define VIDEO_ENC  "ffenc_h263p"
#define VIDEO_PAY  "rtph263ppay"
 
/* #define AUDIO_SRC  "alsasrc" */
#define AUDIO_SRC  "directsoundsrc"
 
/* the encoder and payloader elements */
#define AUDIO_ENC  "alawenc"
#define AUDIO_PAY  "rtppcmapay"
 
int
main (int argc, char *argv[])
{
  GstElement *pipeline;
  GMainLoop *loop;
 
  GstElement *videosrc, *capsfilter,*videoqueue,*encqueue,*videorate,*videoconv, *videotee,*previewconv, *preview,*videoenc, *videopay, *videosendtee;
  GstElement *rtpbin, *v_rtpsink, *v_rtcpsink, *v_rtcpsrc;
 
  GstElement *audiosrc, *audioqueue,*audioconv, *audiores, *audioenc, *audiopay;
  GstElement *a_rtpsink, *a_rtcpsink, *a_rtcpsrc;
  gboolean res;
  GstPadLinkReturn lres;
  GstPad *srcpad, *sinkpad;
  GstCaps *caps;
 
  /* always init first */
  gst_init (&argc, &argv);
 
  /* the pipeline to hold everything */
  pipeline = gst_pipeline_new (NULL);
  g_assert (pipeline);
 
  /* the audio capture and format conversion */
  videosrc = gst_element_factory_make (VIDEO_SRC, "videosrc");
  g_assert (videosrc);
  videoqueue = gst_element_factory_make ("queue", "videoqueue");
  g_assert (videoqueue);
  encqueue = gst_element_factory_make ("queue", "encqueue");
  g_assert (encqueue);
  capsfilter = gst_element_factory_make ("capsfilter", "capsfilter");
  g_assert (capsfilter);
 
  videorate = gst_element_factory_make ("videorate", "videorate");
  g_assert (videoqueue);
  videoconv = gst_element_factory_make ("ffmpegcolorspace", "videoconv");
  g_assert (videoconv);
  previewconv = gst_element_factory_make ("ffmpegcolorspace", "previewconv");
  g_assert (previewconv);
 
  videotee = gst_element_factory_make ("tee", "videotee");
  g_assert (videotee);
 
  preview = gst_element_factory_make ("autovideosink", "preview");
  g_assert (preview);
  /* the encoding and payloading */
  videoenc = gst_element_factory_make (VIDEO_ENC, "videoenc");
  g_assert (videoenc);
  videopay = gst_element_factory_make (VIDEO_PAY, "videopay");
  g_assert (videopay);
 
  videosendtee = gst_element_factory_make ("tee", "videosendtee");
  g_assert (videosendtee);
 
  /* add capture and payloading to the pipeline and link */
  gst_bin_add_many (GST_BIN (pipeline), videosrc, videoqueue,encqueue,capsfilter,videorate,videoconv, videotee,previewconv,preview,videoenc, videopay,videosendtee, NULL);
 
  caps=gst_caps_from_string("video/x-raw-yuv , width=352, "
            "height=288 , framerate=15/1");
  g_object_set (capsfilter, "caps", caps, NULL);
 
  res = gst_element_link_many (videosrc,capsfilter,videorate,videoconv, videotee,previewconv, preview,NULL);
  g_assert (res == TRUE);
 
 
  srcpad = gst_element_get_request_pad (videotee, "src%d");
  sinkpad = gst_element_get_static_pad (encqueue, "sink");
  lres = gst_pad_link (srcpad, sinkpad);
  g_assert (lres == GST_PAD_LINK_OK);
  gst_object_unref (srcpad);
 
 
  res = gst_element_link_many (encqueue,videoenc,videopay, videosendtee,NULL);
  g_assert (res == TRUE);
 
   /* the audio capture and format conversion */
  audiosrc = gst_element_factory_make (AUDIO_SRC, "audiosrc");
  g_assert (audiosrc);
   audioqueue = gst_element_factory_make ("queue", "audioqueue");
  g_assert (audioqueue);
  audioconv = gst_element_factory_make ("audioconvert", "audioconv");
  g_assert (audioconv);
  audiores = gst_element_factory_make ("audioresample", "audiores");
  g_assert (audiores);
  /* the encoding and payloading */
  audioenc = gst_element_factory_make (AUDIO_ENC, "audioenc");
  g_assert (audioenc);
  audiopay = gst_element_factory_make (AUDIO_PAY, "audiopay");
  g_assert (audiopay);
 
  /* add capture and payloading to the pipeline and link */
  gst_bin_add_many (GST_BIN (pipeline), audiosrc, audioqueue,audioconv, audiores,
      audioenc, audiopay, NULL);
 
  res = gst_element_link_many (audiosrc, audioqueue,audioconv, audiores, audioenc,
      audiopay, NULL);
  g_assert (res == TRUE);
 
 
  /* the rtpbin element */
  rtpbin = gst_element_factory_make ("gstrtpbin", "rtpbin");
  g_assert (rtpbin);
 
  gst_bin_add (GST_BIN (pipeline), rtpbin);
 
  /* the udp sinks and source we will use for RTP and RTCP */
  v_rtpsink = gst_element_factory_make ("udpsink", "rtpsink");
  g_assert (v_rtpsink);
  g_object_set (v_rtpsink, "port", 5000, "host", DEST_HOST, NULL);
 
  v_rtcpsink = gst_element_factory_make ("udpsink", "rtcpsink");
  g_assert (v_rtcpsink);
  g_object_set (v_rtcpsink, "port", 5001, "host", DEST_HOST, NULL);
  /* no need for synchronisation or preroll on the RTCP sink */
  g_object_set (v_rtcpsink, "async", FALSE, "sync", FALSE, NULL);
 
  v_rtcpsrc = gst_element_factory_make ("udpsrc", "rtcpsrc");
  g_assert (v_rtcpsrc);
  g_object_set (v_rtcpsrc, "port", 5007, NULL);
 
  gst_bin_add_many (GST_BIN (pipeline), v_rtpsink, v_rtcpsink, v_rtcpsrc, NULL);
 
  /* now link all to the rtpbin, start by getting an RTP sinkpad for session 0 */
  sinkpad = gst_element_get_request_pad (rtpbin, "send_rtp_sink_0");
  srcpad = gst_element_get_request_pad (videosendtee, "src%d");
  //srcpad = gst_element_get_static_pad (videopay, "src");
  lres = gst_pad_link (srcpad, sinkpad);
  g_assert (lres == GST_PAD_LINK_OK);
  gst_object_unref (srcpad);
 
  /* get the RTP srcpad that was created when we requested the sinkpad above and
   * link it to the rtpsink sinkpad*/
  srcpad = gst_element_get_static_pad (rtpbin, "send_rtp_src_0");
  sinkpad = gst_element_get_static_pad (v_rtpsink, "sink");
  lres = gst_pad_link (srcpad, sinkpad);
  g_assert (lres == GST_PAD_LINK_OK);
  gst_object_unref (srcpad);
  gst_object_unref (sinkpad);
 
  /* get an RTCP srcpad for sending RTCP to the receiver */
  srcpad = gst_element_get_request_pad (rtpbin, "send_rtcp_src_0");
  sinkpad = gst_element_get_static_pad (v_rtcpsink, "sink");
  lres = gst_pad_link (srcpad, sinkpad);
  g_assert (lres == GST_PAD_LINK_OK);
  gst_object_unref (sinkpad);
 
  /* we also want to receive RTCP, request an RTCP sinkpad for session 0 and
   * link it to the srcpad of the udpsrc for RTCP */
  srcpad = gst_element_get_static_pad (v_rtcpsrc, "src");
  sinkpad = gst_element_get_request_pad (rtpbin, "recv_rtcp_sink_0");
  lres = gst_pad_link (srcpad, sinkpad);
  g_assert (lres == GST_PAD_LINK_OK);
  gst_object_unref (srcpad);
 
 
  /* the udp sinks and source we will use for RTP and RTCP */
  a_rtpsink = gst_element_factory_make ("udpsink", "a_rtpsink");
  g_assert (a_rtpsink);
  g_object_set (a_rtpsink, "port", 5002, "host", DEST_HOST, NULL);
 
  a_rtcpsink = gst_element_factory_make ("udpsink", "a_rtcpsink");
  g_assert (a_rtcpsink);
  g_object_set (a_rtcpsink, "port", 5003, "host", DEST_HOST, NULL);
  /* no need for synchronisation or preroll on the RTCP sink */
  g_object_set (a_rtcpsink, "async", FALSE, "sync", FALSE, NULL);
 
  a_rtcpsrc = gst_element_factory_make ("udpsrc", "a_rtcpsrc");
  g_assert (a_rtcpsrc);
  g_object_set (a_rtcpsrc, "port", 5009, NULL);
 
  gst_bin_add_many (GST_BIN (pipeline), a_rtpsink, a_rtcpsink, a_rtcpsrc, NULL);
 
  /* now link all to the rtpbin, start by getting an RTP sinkpad for session 0 */
  sinkpad = gst_element_get_request_pad (rtpbin, "send_rtp_sink_1");
  srcpad = gst_element_get_static_pad (audiopay, "src");
  lres = gst_pad_link (srcpad, sinkpad);
  g_assert (lres == GST_PAD_LINK_OK);
  gst_object_unref (srcpad);
 
  /* get the RTP srcpad that was created when we requested the sinkpad above and
   * link it to the rtpsink sinkpad*/
  srcpad = gst_element_get_static_pad (rtpbin, "send_rtp_src_1");
  sinkpad = gst_element_get_static_pad (a_rtpsink, "sink");
  lres = gst_pad_link (srcpad, sinkpad);
  g_assert (lres == GST_PAD_LINK_OK);
  gst_object_unref (srcpad);
  gst_object_unref (sinkpad);
 
  /* get an RTCP srcpad for sending RTCP to the receiver */
  srcpad = gst_element_get_request_pad (rtpbin, "send_rtcp_src_1");
  sinkpad = gst_element_get_static_pad (a_rtcpsink, "sink");
  lres = gst_pad_link (srcpad, sinkpad);
  g_assert (lres == GST_PAD_LINK_OK);
  gst_object_unref (sinkpad);
 
  /* we also want to receive RTCP, request an RTCP sinkpad for session 0 and
   * link it to the srcpad of the udpsrc for RTCP */
  srcpad = gst_element_get_static_pad (a_rtcpsrc, "src");
  sinkpad = gst_element_get_request_pad (rtpbin, "recv_rtcp_sink_1");
  lres = gst_pad_link (srcpad, sinkpad);
  g_assert (lres == GST_PAD_LINK_OK);
  gst_object_unref (srcpad);
 
  g_print ("starting sender pipeline\n");
  gst_element_set_state (pipeline, GST_STATE_PLAYING);
 
  /* we need to run a GLib main loop to get the messages */
  loop = g_main_loop_new (NULL, FALSE);
  g_main_loop_run (loop);
  gst_element_set_state (pipeline, GST_STATE_NULL);
 
  return 0;
}
------------------------------------------------------------------------------
Protect Your Site and Customers from Malware Attacks
Learn about various malware tactics and how to avoid them. Understand
malware threats, the impact they can have on your business, and how you
can protect your company and customers by using code signing.
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel