'\" t
.\" Title: sydra-rtp
.\" Author: [see the "AUTHORS" section]
.\" Generator: DocBook XSL Stylesheets v1.78.1
.\" Date: 10/03/2014
.\" Manual: \ \&
.\" Source: \ \&
.\" Language: English
.\"
.TH "SYDRA\-RTP" "8" "10/03/2014" "\ \&" "\ \&"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
sydra-rtp \- tool for RTP based streams
.SH "SYNOPSIS"
.sp
.nf
sydra\-rtp
[ \fB\-h|\-\-help\fR ]
[ \fB\-D|\-\-nodaemonize\fR ]
[ \fB\-u|\-\-username\fR ]
[ \fB\-g|\-\-groupname\fR ]
[ \fB\-C|\-\-chroot\fR ]
[ \fB\-P|\-\-write\-pid\fR ]
[ \fB\-L|\-\-log\fR :[,[,[\&.\&.]]] ]
[ \fB\-U|\-\-debug\fR ]
[ \fB\-n|\-\-appname\fR ]
[ \fB\-m|\-\-mode\fR (sender|reciever) ]
[ \fB\-\-source\fR ]
[ \fB\-\-video\-encoder\fR ]
[ \fB\-\-video\-payloader\fR ]
[ \fB\-\-previewsink\fR ]
[ \fB\-\-audio\-encoder\fR ]
[ \fB\-\-audio\-payloader\fR ]
[ \fB\-\-video\-caps\fR ]
[ \fB\-\-video\-depayloader\fR ]
[ \fB\-\-video\-decoder\fR ]
[ \fB\-\-audio\-caps\fR ]
[ \fB\-\-audio\-depayloader\fR ]
[ \fB\-\-audio\-decoder\fR ]
[ \fB\-\-sink\fR ]
[ \fB\-a|\-\-rtp\-host\fR ]
[ \fB\-o|\-\-rtp\-port\-base\fR ]
[ \fB\-A|\-\-rtp\-addr\-local\fR ]
[ \fB\-O|\-\-rtp\-port\-base\-local\fR ]
[ \fB\-\-rtp\-host\-reflector\fR ]
[ \fB\-\-rtp\-port\-base\-reflector\fR ]
[ \fB\-c|\-\-no\-auto\-client\fR ]
[ \fB\-t|\-\-timeout\fR ]
[ \fB\-k|\-\-keepalive\-interval\fR ]
[ \fB\-\-rec\-video\-encoder\fR ]
[ \fB\-\-rec\-audio\-encoder\fR ]
[ \fB\-\-rec\-mux\fR ]
[ \fB\-\-rec\-name\-format\fR ]
.fi
.SH "DESCRIPTION"
.sp
\fBsydra\fR is a toolbox which allows you to set up multiple bidirectional Video/Audio streams from external locations\&. \fBsydra\fR has been written to be used for the Elevate Festival in Graz Austria in order to involve external locations to present themselves at the festival\&.
.sp
This manpage describes \fBsydra\-rtp\fR the basic utility for the task which is based on GStreamer and is written in C\&. The \fBsydra\-rtp\fR utility creates a gstreamer pipeline to send or receive RTP\-based Audio/Video streams\&. For a bidirectional connection 2 instances of \fBsydra\-rtp\fR are required on both sides of the communication\&. \fBsydra\-rtp\fR has automatic client detection capabilities in the form of keep alive messages\&. These message are sent out by receivers to request RTP packets from a sender\&. The sender will send RTP packets to one or more receivers which request the stream\&. It also uses the keep alive messages to remove stale client \fIconnections\fR\&. A receiver can also request to be removed from the list of receivers\&. This ensures a fast and clean shutdown\&. The keepalive messages are also a simple way to work around NAT and firewalls (UDP hole punching)\&.
.SH "OPTIONS"
.sp
The following options can be passed to the \fBsydra\-rtp\fR daemon:
.sp
\fBglobal options\fR
.PP
\fB\-D, \-\-nodaemonize\fR
.RS 4
This option instructs
\fBsydra\-rtp\fR
to run in foreground instead of becoming a daemon which is the default\&.
.RE
.PP
\fB\-u, \-\-username \fR
.RS 4
run as this user\&. If no group is specified (\fB\-g\fR) the default group of the user is used\&. The default is to not drop privileges\&.
.RE
.PP
\fB\-g, \-\-groupname \fR
.RS 4
run as this group\&. If no username is specified (\fB\-u\fR) this gets ignored\&. The default is to not drop privileges\&.
.RE
.PP
\fB\-C, \-\-chroot \fR
.RS 4
Instruct
\fBsydra\-rtp\fR
to run in a chroot jail\&. The default is to not run in chroot\&.
.RE
.PP
\fB\-P, \-\-write\-pid \fR
.RS 4
Instruct
\fBsydra\-rtp\fR
to write it\(cqs pid to this file\&. The default is to not create a pid file\&.
.RE
.PP
\fB\-L, \-\-log :[,[,[\&.\&.]]]\fR
.RS 4
add log target to logging system\&. This can be invoked several times in order to log to different targets at the same time\&. Every target has its own log level which is a number between 0 and 5\&. Where 0 means disabling log and 5 means debug messages are enabled\&.
The file target can be used more than once with different levels\&. If no target is provided at the command line a single target with the config
\fBsyslog:3,sydra\-rtp,daemon\fR
is added\&.
The following targets are supported:
.PP
\fBsyslog\fR
.RS 4
log to syslog daemon, parameters [,[,]]
.RE
.PP
\fBfile\fR
.RS 4
log to file, parameters [,]
.RE
.PP
\fBstdout\fR
.RS 4
log to standard output, parameters
.RE
.PP
\fBstderr\fR
.RS 4
log to standard error, parameters
.RE
.RE
.PP
\fB\-U, \-\-debug\fR
.RS 4
This option instructs
\fBsydra\-rtp\fR
to run in debug mode\&. It implicits
\fB\-D\fR
(don\(cqt daemonize) and adds a log target with the configuration
\fBstdout:5\fR
(logging with maximum level)\&. In future releases there might be additional output when this option is supplied\&.
.RE
.PP
\fB\-n, \-\-appname \fR
.RS 4
This set the application name using
\fIg_set_prgname()\fR\&. It will be used for example by xvimagesink for window title\&.
.RE
.PP
\fB\-m, \-\-mode (sender|reciever)\fR
.RS 4
This sets the main mode of
\fBsydra\-rtp\fR\&. The sender will read raw video and audio from the source bin and send it via RTP to one or more receivers\&.
.RE
.sp
\fBsender\-mode only options\fR
.PP
\fB\-\-source \fR
.RS 4
A gst\-launch\-style description for the raw video and audio bin\&. This bin must contain an element called
\fIvideosrc\fR
and an element called
\fIaudiosrc\fR
which should each contain a pad called
\fIsrc\fR\&. Theses pads will get connected to the encoder bins\&. Example:
\fIv4l2src ! videoconvert ! videoscale ! video/x\-raw,format=I420,width=864,height=480 ! identity name="videosrc" autoaudiosrc ! audio/x\-raw,format=S16LE,channels=1,rate=48000 ! identity name="audiosrc"\fR
.RE
.PP
\fB\-\-video\-encoder \fR
.RS 4
Bin description for the video encoder\&. Example:
\fIvideoconvert ! vp8enc\fR
.RE
.PP
\fB\-\-video\-payloader \fR
.RS 4
A RTP payloader element for the video codec in use\&. Example:
\fIrtpvp8pay\fR
.RE
.PP
\fB\-\-previewsink \fR
.RS 4
A video sink element for local preview\&. Example:
\fIvideoconvert ! textoverlay test="preview" ! xvimagesink\fR
.RE
.PP
\fB\-\-audio\-encoder \fR
.RS 4
Bin description for the audio encoder\&. Example:
\fIaudioconveert ! opusenc\fR
.RE
.PP
\fB\-\-audio\-payloader \fR
.RS 4
A RTP payloader element for the audio codec in use\&. Example:
\fIrtpopuspay\fR
.RE
.sp
\fBreceiver\-mode only options\fR
.PP
\fB\-\-video\-caps \fR
.RS 4
These caps will get assigned to incoming RTP packets for video\&. Example:
\fIapplication/x\-rtp,media=video,clock\-rate=90000,encoding\-name=VP8\-DRAFT\-IETF\-01,caps="video/x\-vp8"\fR
.RE
.PP
\fB\-\-video\-depayloader \fR
.RS 4
A RTP depayloader element for the video codec in use\&. Example:
\fIrtpvp8depay\fR
.RE
.PP
\fB\-\-video\-decoder \fR
.RS 4
Bin description for the video decoder\&. Example:
\fIvp8dec\fR
.RE
.PP
\fB\-\-audio\-caps \fR
.RS 4
These caps will get assigned to incoming RTP packets for audio\&. Example:
\fIapplication/x\-rtp,media=audio,clock\-rate=48000,payload=96,encoding\-name=X\-GST\-OPUS\-DRAFT\-SPITTKA\-00,caps="audio/x\-opus"\fR
.RE
.PP
\fB\-\-audio\-depayloader \fR
.RS 4
A RTP depayloader element for the audio codec in use\&. Example:
\fIrtpopusdepay\fR
.RE
.PP
\fB\-\-audio\-decoder \fR
.RS 4
Bin description for the audio decoder\&. Example:
\fIopusdec\fR
.RE
.PP
\fB\-\-sink \fR
.RS 4
A gst\-launch\-style description for the raw video and audio bin\&. This bin must contain an element called
\fIvideosink\fR
and an element called
\fIaudiosink\fR
which should each contain a pad called
\fIsink\fR\&. Theses pads will get connected to the decoder bins\&. Example:
\fIvideoconvert name="videosink" ! videoscale add\-borders=true ! xvimagesink audioconvert name="audiosink" ! autoaudiosink\fR
.RE
.sp
\fBoptions for RTP\fR
.PP
\fB\-a, \-\-rtp\-host \fR
.RS 4
In
\fIsender\fR
mode this sets the address or hostname of the remote RTP receiver\&. Please mind that the remote RTP host is always added as a receiver and it shouldn\(cqt be configured to send keepalives\&. This would re\-add the receiver to the list of clients and as a result duplicate packages will be sent\&. Also the remote RTP host is excluded from client timeout handling and remove requests from it will get ignored\&. When you omit this in sender mode the automatic client detection will be used to add receivers\&. In
\fIreceiver\fR
mode keepalive messages will be sent to this host\&. Leave empty to disable keepalive messages\&.
.RE
.PP
\fB\-o, \-\-rtp\-port\-base \fR
.RS 4
The base number for remote ports\&.
\fBsydra\-rtp\fR
will send the RTP/RTCP packets using the following mapping:
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
rtp\-port\-base + 0: RTP Video
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
rtp\-port\-base + 1: RTCP Video
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
rtp\-port\-base + 2: RTP Audio
.RE
.sp
.RS 4
.ie n \{\
\h'-04'\(bu\h'+03'\c
.\}
.el \{\
.sp -1
.IP \(bu 2.3
.\}
rtp\-port\-base + 3: RTCP Audio
.RE
.RE
.PP
\fB\-A, \-\-rtp\-addr\-local \fR
.RS 4
The local address to wait for incoming UDP messages\&. Leave empty to listen on any address\&.
.RE
.PP
\fB\-O, \-\-rtp\-port\-base\-local \fR
.RS 4
The base number for local ports to bind to\&. The same mapping as for the remote port\-base is used to map incoming RTP packets to the RTP bin\&.
.RE
.PP
\fB\-\-rtp\-host\-reflector \fR
.RS 4
When in receiver mode the incoming RTP packets will get reflected to this host\&. Leave empty to disable RTP packet reflection\&.
.RE
.PP
\fB\-\-rtp\-port\-base\-reflector \fR
.RS 4
When a reflector\-host gets specified using the option above the RTP packets will get sent to the ports based on this\&. The same mapping as with the other port\-base options is used\&.
.RE
.PP
\fB\-c, \-\-no\-auto\-client\fR
.RS 4
This disables auto\-detection for clients in
\fIsender\fR
mode\&. Mind that if you disable the automatic client detection and also omit the rtp\-host option
\fBsydra\-rtp\fR
won\(cqt send any RTP messages\&. If configured recording will work but this is most probably not what you want\&.
.RE
.PP
\fB\-t, \-\-timeout \fR
.RS 4
This sets the client timeout in seconds in
\fIsender\fR
mode\&. A value of 0 disables client timeouts\&. This is not recommended\&.
.RE
.PP
\fB\-k, \-\-keepalive\-interval \fR
.RS 4
This sets the interval in seconds for sending out keepalive messages in
\fIreceiver\fR
mode\&. A value of 0 disables keepalive messages and therefor the client auto detection won\(cqt work for this client\&.
.RE
.sp
\fBoptions for recording\fR
.PP
\fB\-\-rec\-video\-encoder \fR
.RS 4
A bin description for the video encoder used for recording\&. If you leave this empty the output from the RTP video encoder is used\&. Example:
\fIvideoconvert ! jpegenc\fR
.RE
.PP
\fB\-\-rec\-audio\-encoder \fR
.RS 4
A bin description for the audio encoder used for recording\&. If you leave this empty the output from the RTP audio encoder is used\&. Example:
\fIaudioconvert ! vorbisenc\fR
.RE
.PP
\fB\-\-rec\-mux \fR
.RS 4
A gstreamer muxer element used for recording\&. If you leave this empty recording will be disabled\&. Example:
\fImatroskamux\fR
.RE
.PP
\fB\-\-rec\-name\-format \fR
.RS 4
A
\fIstrftime\fR
based format string which will be used to create the name for the recorded file\&. Example: \&./recordings/%Y\-%m\-%d_%H\-%M\-%S\&.mkv
.RE
.SH "BUGS"
.sp
Most likely there are some bugs in \fBsydra\-rtp\fR\&. If you find a bug, please let the developers know at equinox@spreadspace\&.org\&. Of course, patches are preferred\&.
.SH "SEE ALSO"
.sp
\fBstrftime\fR(3), \fBgst\-launch\fR(1)
.SH "AUTHORS"
.sp
Christian Pointner
.SH "COPYING"
.sp
Copyright (C) 2014 Christian Pointner\&. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version\&.