gstrtpbin

gstrtpbin — Real-Time Transport Protocol bin

Synopsis

                    GstRtpBin;

Object Hierarchy

  GObject
   +----GstObject
         +----GstElement
               +----GstBin
                     +----GstRtpBin

Implemented Interfaces

GstRtpBin implements GstChildProxy.

Properties

  "do-lost"                  gboolean              : Read / Write
  "latency"                  guint                 : Read / Write
  "sdes"                     GstStructure*         : Read / Write
  "ignore-pt"                gboolean              : Read / Write
  "autoremove"               gboolean              : Read / Write
  "buffer-mode"              RTPJitterBufferMode   : Read / Write

Signals

  "clear-pt-map"                                   : Run Last / Action
  "get-internal-session"                           : Run Last / Action
  "on-bye-ssrc"                                    : Run Last
  "on-bye-timeout"                                 : Run Last
  "on-new-ssrc"                                    : Run Last
  "on-npt-stop"                                    : Run Last
  "on-sender-timeout"                              : Run Last
  "on-ssrc-active"                                 : Run Last
  "on-ssrc-collision"                              : Run Last
  "on-ssrc-sdes"                                   : Run Last
  "on-ssrc-validated"                              : Run Last
  "on-timeout"                                     : Run Last
  "request-pt-map"                                 : Run Last
  "reset-sync"                                     : Run Last / Action
  "payload-type-change"                            : Run Last

Description

RTP bin combines the functions of GstRtpSession, GstRtpSsrcDemux, GstRtpJitterBuffer and GstRtpPtDemux in one element. It allows for multiple RTP sessions that will be synchronized together using RTCP SR packets.

GstRtpBin is configured with a number of request pads that define the functionality that is activated, similar to the GstRtpSession element.

To use 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. 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.

To also use GstRtpBin as an RTCP receiver, request a recv_rtcp_sink_%d pad. The session number must be specified in the pad name.

If you want the session manager to generate and send RTCP packets, request the send_rtcp_src_%d pad with the session number in the pad name. Packet pushed on this pad contain SR/RR RTCP reports that should be sent to all participants in the session.

To use GstRtpBin as a sender, request a send_rtp_sink_%d pad, which will automatically create a send_rtp_src_%d pad. If the session number is not provided, the pad from the lowest available session will be returned. The session manager will modify the SSRC in the RTP packets to its own SSRC and wil forward the packets on the send_rtp_src_%d pad after updating its internal state.

The session manager needs the clock-rate of the payload types it is handling and will signal the "request-pt-map" signal when it needs such a mapping. One can clear the cached values with the "clear-pt-map" signal.

Example pipelines

gst-launch udpsrc port=5000 caps="application/x-rtp, ..." ! .recv_rtp_sink_0 \
    gstrtpbin ! rtptheoradepay ! theoradec ! xvimagesink
Receive RTP data from port 5000 and send to the session 0 in gstrtpbin.
gst-launch gstrtpbin name=rtpbin \
        v4l2src ! ffmpegcolorspace ! ffenc_h263 ! rtph263ppay ! rtpbin.send_rtp_sink_0 \
                  rtpbin.send_rtp_src_0 ! udpsink port=5000                            \
                  rtpbin.send_rtcp_src_0 ! udpsink port=5001 sync=false async=false    \
                  udpsrc port=5005 ! rtpbin.recv_rtcp_sink_0                           \
        audiotestsrc ! amrnbenc ! rtpamrpay ! rtpbin.send_rtp_sink_1                   \
                  rtpbin.send_rtp_src_1 ! udpsink port=5002                            \
                  rtpbin.send_rtcp_src_1 ! udpsink port=5003 sync=false async=false    \
                  udpsrc port=5007 ! rtpbin.recv_rtcp_sink_1
Encode and payload H263 video captured from a v4l2src. Encode and payload AMR audio generated from audiotestsrc. The video is sent to session 0 in rtpbin and the audio is sent to session 1. Video packets are sent on UDP port 5000 and audio packets on port 5002. The video RTCP packets for session 0 are sent on port 5001 and the audio RTCP packets for session 0 are sent on port 5003. RTCP packets for session 0 are received on port 5005 and RTCP for session 1 is received on port 5007. Since RTCP packets from the sender should be sent as soon as possible and do not participate in preroll, sync=false and async=false is configured on udpsink
gst-launch -v gstrtpbin name=rtpbin                                          \
    udpsrc caps="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H263-1998" \
            port=5000 ! rtpbin.recv_rtp_sink_0                                \
        rtpbin. ! rtph263pdepay ! ffdec_h263 ! xvimagesink                    \
     udpsrc port=5001 ! rtpbin.recv_rtcp_sink_0                               \
     rtpbin.send_rtcp_src_0 ! udpsink port=5005 sync=false async=false        \
    udpsrc caps="application/x-rtp,media=(string)audio,clock-rate=(int)8000,encoding-name=(string)AMR,encoding-params=(string)1,octet-align=(string)1" \
            port=5002 ! rtpbin.recv_rtp_sink_1                                \
        rtpbin. ! rtpamrdepay ! amrnbdec ! alsasink                           \
     udpsrc port=5003 ! rtpbin.recv_rtcp_sink_1                               \
     rtpbin.send_rtcp_src_1 ! udpsink port=5007 sync=false async=false
Receive H263 on port 5000, send it through rtpbin in session 0, depayload, decode and display the video. Receive AMR on port 5002, send it through rtpbin in session 1, depayload, decode and play the audio. Receive server RTCP packets for session 0 on port 5001 and RTCP packets for session 1 on port 5003. These packets will be used for session management and synchronisation. Send RTCP reports for session 0 on port 5005 and RTCP reports for session 1 on port 5007.

Last reviewed on 2007-08-30 (0.10.6)

Details

GstRtpBin

typedef struct _GstRtpBin GstRtpBin;

Property Details

The "do-lost" property

  "do-lost"                  gboolean              : Read / Write

Send an event downstream when a packet is lost.

Default value: FALSE


The "latency" property

  "latency"                  guint                 : Read / Write

Default amount of ms to buffer in the jitterbuffers.

Default value: 200


The "sdes" property

  "sdes"                     GstStructure*         : Read / Write

The SDES items of this session.


The "ignore-pt" property

  "ignore-pt"                gboolean              : Read / Write

Do not demultiplex based on PT values.

Default value: FALSE


The "autoremove" property

  "autoremove"               gboolean              : Read / Write

Automatically remove timed out sources.

Default value: FALSE


The "buffer-mode" property

  "buffer-mode"              RTPJitterBufferMode   : Read / Write

Control the buffering algorithm in use.

Default value: Slave receiver to sender clock

Signal Details

The "clear-pt-map" signal

void                user_function                      (GstRtpBin *rtpbin,
                                                        gpointer   user_data)      : Run Last / Action

Clear all previously cached pt-mapping obtained with "request-pt-map".

rtpbin :

the object which received the signal

user_data :

user data set when the signal handler was connected.

The "get-internal-session" signal

RTPSession*         user_function                      (GstRtpBin *rtpbin,
                                                        guint      id,
                                                        gpointer   user_data)      : Run Last / Action

Request the internal RTPSession object as GObject in session id.

rtpbin :

the object which received the signal

id :

the session id

user_data :

user data set when the signal handler was connected.

The "on-bye-ssrc" signal

void                user_function                      (GstRtpBin *rtpbin,
                                                        guint      session,
                                                        guint      ssrc,
                                                        gpointer   user_data)      : Run Last

Notify of an SSRC that became inactive because of a BYE packet.

rtpbin :

the object which received the signal

session :

the session

ssrc :

the SSRC

user_data :

user data set when the signal handler was connected.

The "on-bye-timeout" signal

void                user_function                      (GstRtpBin *rtpbin,
                                                        guint      session,
                                                        guint      ssrc,
                                                        gpointer   user_data)      : Run Last

Notify of an SSRC that has timed out because of BYE

rtpbin :

the object which received the signal

session :

the session

ssrc :

the SSRC

user_data :

user data set when the signal handler was connected.

The "on-new-ssrc" signal

void                user_function                      (GstRtpBin *rtpbin,
                                                        guint      session,
                                                        guint      ssrc,
                                                        gpointer   user_data)      : Run Last

Notify of a new SSRC that entered session.

rtpbin :

the object which received the signal

session :

the session

ssrc :

the SSRC

user_data :

user data set when the signal handler was connected.

The "on-npt-stop" signal

void                user_function                      (GstRtpBin *rtpbin,
                                                        guint      session,
                                                        guint      ssrc,
                                                        gpointer   user_data)      : Run Last

Notify that SSRC sender has sent data up to the configured NPT stop time.

rtpbin :

the object which received the signal

session :

the session

ssrc :

the SSRC

user_data :

user data set when the signal handler was connected.

The "on-sender-timeout" signal

void                user_function                      (GstRtpBin *rtpbin,
                                                        guint      session,
                                                        guint      ssrc,
                                                        gpointer   user_data)      : Run Last

Notify of a sender SSRC that has timed out and became a receiver

rtpbin :

the object which received the signal

session :

the session

ssrc :

the SSRC

user_data :

user data set when the signal handler was connected.

The "on-ssrc-active" signal

void                user_function                      (GstRtpBin *rtpbin,
                                                        guint      session,
                                                        guint      ssrc,
                                                        gpointer   user_data)      : Run Last

Notify of a SSRC that is active, i.e., sending RTCP.

rtpbin :

the object which received the signal

session :

the session

ssrc :

the SSRC

user_data :

user data set when the signal handler was connected.

The "on-ssrc-collision" signal

void                user_function                      (GstRtpBin *rtpbin,
                                                        guint      session,
                                                        guint      ssrc,
                                                        gpointer   user_data)      : Run Last

Notify when we have an SSRC collision

rtpbin :

the object which received the signal

session :

the session

ssrc :

the SSRC

user_data :

user data set when the signal handler was connected.

The "on-ssrc-sdes" signal

void                user_function                      (GstRtpBin *rtpbin,
                                                        guint      session,
                                                        guint      ssrc,
                                                        gpointer   user_data)      : Run Last

Notify of a SSRC that is active, i.e., sending RTCP.

rtpbin :

the object which received the signal

session :

the session

ssrc :

the SSRC

user_data :

user data set when the signal handler was connected.

The "on-ssrc-validated" signal

void                user_function                      (GstRtpBin *rtpbin,
                                                        guint      session,
                                                        guint      ssrc,
                                                        gpointer   user_data)      : Run Last

Notify of a new SSRC that became validated.

rtpbin :

the object which received the signal

session :

the session

ssrc :

the SSRC

user_data :

user data set when the signal handler was connected.

The "on-timeout" signal

void                user_function                      (GstRtpBin *rtpbin,
                                                        guint      session,
                                                        guint      ssrc,
                                                        gpointer   user_data)      : Run Last

Notify of an SSRC that has timed out

rtpbin :

the object which received the signal

session :

the session

ssrc :

the SSRC

user_data :

user data set when the signal handler was connected.

The "request-pt-map" signal

GstCaps*            user_function                      (GstRtpBin *rtpbin,
                                                        guint      session,
                                                        guint      pt,
                                                        gpointer   user_data)      : Run Last

Request the payload type as GstCaps for pt in session.

rtpbin :

the object which received the signal

session :

the session

pt :

the pt

user_data :

user data set when the signal handler was connected.

The "reset-sync" signal

void                user_function                      (GstRtpBin *rtpbin,
                                                        gpointer   user_data)      : Run Last / Action

Reset all currently configured lip-sync parameters and require new SR packets for all streams before lip-sync is attempted again.

rtpbin :

the object which received the signal

user_data :

user data set when the signal handler was connected.

The "payload-type-change" signal

void                user_function                      (GstRtpBin *rtpbin,
                                                        guint      session,
                                                        guint      pt,
                                                        gpointer   user_data)      : Run Last

Signal that the current payload type changed to pt in session.

rtpbin :

the object which received the signal

session :

the session

pt :

the pt

user_data :

user data set when the signal handler was connected.

Since 0.10.17

See Also

gstrtpjitterbuffer, gstrtpsession, gstrtpptdemux, gstrtpssrcdemux