Provided by: roc-toolkit-tools_0.3.0+dfsg-7ubuntu2_amd64 bug

NAME

       roc-recv - receive real-time audio

SYNOPSIS

       roc-recv OPTIONS

DESCRIPTION

       Receive audio streams from remote senders and write them to an audio device or file.

   Options
       -h, --help
              Print help and exit

       -V, --version
              Print version and exit

       -v, --verbose
              Increase verbosity level (may be used multiple times)

       -L, --list-supported
              list supported schemes and formats

       -o,--output=IO_URI
              Output file or device URI

       --output-format=FILE_FORMAT
              Force output file format

       --backup=IO_URI
              Backup file or device URI (if set, used when there are no sessions)

       --backup-format=FILE_FORMAT
              Force backup file format

       -s,--source=ENDPOINT_URI
              Local source endpoint

       -r,--repair=ENDPOINT_URI
              Local repair endpoint

       -c,--control=ENDPOINT_URI
              Local control endpoint

       --miface=MIFACE
              IPv4 or IPv6 address of the network interface on which to join the multicast group

       --reuseaddr
              enable SO_REUSEADDR when binding sockets

       --sess-latency=STRING
              Session target latency, TIME units

       --io-latency=STRING
              Playback target latency, TIME units

       --latency-tolerance=STRING
              Maximum latency deviation, TIME units

       --no-play-timeout=STRING
              No playback timeout, TIME units

       --choppy-play-timeout=STRING
              Choppy playback timeout, TIME units

       --packet-limit=INT
              Maximum packet size, in bytes

       --frame-limit=INT
              Maximum internal frame size, in bytes

       --frame-length=TIME
              Duration of the internal frames, TIME units

       --rate=INT
              Override output sample rate, Hz

       --clock-backend=ENUM
              Clock synchronization backend  (possible values="disable", "niq" default=`niq')

       --clock-profile=ENUM
              Clock  synchronization profile  (possible values="default", "responsive", "gradual"
              default=`default')

       --resampler-backend=ENUM
              Resampler  backend   (possible  values="default",  "builtin",  "speex",  "speexdec"
              default=`default')

       --resampler-profile=ENUM
              Resampler profile  (possible values="low", "medium", "high" default=`medium')

       -1, --oneshot
              Exit when last connected client disconnects (default=off)

       --profiling
              Enable self-profiling  (default=off)

       --beep Enable beeping on packet loss  (default=off)

       --color=ENUM
              Set  colored  logging  mode  for  stderr  output (possible values="auto", "always",
              "never" default=`auto')

   Endpoint URI
       --source, --repair, and --control options define network endpoints on which to receive the
       traffic.

       ENDPOINT_URI should have the following form:

       protocol://host[:port][/path][?query]

       Examples:

       • rtsp://localhost:123/path?queryrtp+rs8m://localhost:123rtp://0.0.0.0:123rtp://[::1]:123rtcp://0.0.0.0:123

       The list of supported protocols can be retrieved using --list-supported option.

       The  host  field  should be either FQDN (domain name), or IPv4 address, or IPv6 address in
       square brackets. It may be 0.0.0.0 (for IPv4) or [::] (for IPv6) to bind endpoint  to  all
       network interfaces.

       The  port  field  can  be  omitted if the protocol defines standard port. Otherwise, it is
       mandatory. It may be set to zero to bind endpoint to a radomly chosen ephemeral port.

       The path and query fields are allowed only for protocols that support them, e.g. for RTSP.

       If FEC is enabled on sender, a pair of a source and repair endpoints should  be  provided.
       The  two  endpoints should use compatible protocols, e.g. rtp+rs8m:// for source endpoint,
       and rs8m:// for repair endpoint. If FEC is disabled, a single source  endpoint  should  be
       provided.

       Supported source and repair protocols:

       • source rtp://, repair none (bare RTP without FEC)

       • source rtp+rs8m://, repair rs8m:// (RTP with Reed-Solomon FEC)

       • source rtp+ldpc://, repair ldpc:// (RTP with LDPC-Staircase FEC)

       In  addition,  it  is  recommended  to  provide  control  endpoint. It is used to exchange
       non-media information used to  identify  session,  carry  feedback,  etc.  If  no  control
       endpoint  is provided, session operates in reduced fallback mode, which may be less robust
       and may not support all features.

       Supported control protocols:

       • rtcp://

   IO URI
       --output and --backup options require a device or file URI in one of the following forms:

       • DEVICE_TYPE://DEVICE_NAME -- audio device

       • DEVICE_TYPE://default -- default audio device for given device type

       • file:///ABS/PATH -- absolute file path

       • file://localhost/ABS/PATH -- absolute file path (alternative form; only "localhost" host
         is supported)

       • file:/ABS/PATH -- absolute file path (alternative form)

       • file:REL/PATH -- relative file path

       • file://- -- stdout

       • file:- -- stdout (alternative form)

       Examples:

       • pulse://defaultpulse://alsa_output.pci-0000_00_1f.3.analog-stereoalsa://hw:1,0file:///home/user/test.wavfile://localhost/home/user/test.wavfile:/home/user/test.wavfile:./test.wavfile:-

       The  list  of  supported  schemes and file formats can be retrieved using --list-supported
       option.

       If the --output is omitted, the default driver and device are selected.  If  the  --backup
       is omitted, no backup source is used.

       The  --output-format and --backup-format options can be used to force the output or backup
       file format. If the option is omitted, the file format is  auto-detected.  The  option  is
       always required when the output or backup is stdout or stdin.

       The  path  component  of  the  provided URI is percent-decoded. For convenience, unencoded
       characters are allowed as well, except that % should be always encoded as %25.

       For example, the file named /foo/bar%/[baz] may be specified using either of the following
       URIs: file:///foo%2Fbar%25%2F%5Bbaz%5D and file:///foo/bar%25/[baz].

   Multicast interface
       If  --miface option is present, it defines an IP address of the network interface on which
       to join the multicast group. If not present, no multicast group should be joined.

       It's not possible to receive multicast traffic without joining a multicast group. The user
       should either provide multicast interface, or join the group manually using foreign tools.

       MIFACE  should  be  an  IP address of the network interface on which to join the multicast
       group. It may be 0.0.0.0 (for IPv4) or :: (for IPv6) to join the multicast  group  on  all
       available interfaces.

   Multiple slots
       Multiple sets of endpoints can be specified to retrieve media from multiple addresses.

       Such  endpoint sets are called slots. All slots should have the same set of endpoint types
       (source, repair, etc) and should use the same protocols for them. All  slots  should  also
       have their own multicast interface option, if it's used.

   SO_REUSEADDR
       If  --reuseaddr  option  is  provided,  SO_REUSEADDR socket option will be enabled for all
       sockets (by default it's enabled only for multicast sockets).

       For TCP, it allows immediately reusing recently closed socket in  TIME_WAIT  state,  which
       may be useful you want to be able to restart server quickly.

       For  UDP, it allows multiple processes to bind to the same address, which may be useful if
       you're using systemd socket activation.

       Regardless of the option, SO_REUSEADDR is always disabled when binding to ephemeral port.

   Backup audio
       If --backup option is given, it defines input audio device or file which  will  be  played
       when there are no connected sessions. If it's not given, silence is played instead.

       Backup  file  is  restarted from the beginning each time when the last session disconnect.
       The playback of of the backup file is automatically looped.

   Time units
       TIME should have one of the following forms:
              123ns, 123us, 123ms, 123s, 123m, 123h

EXAMPLES

   Endpoint examples
       Bind one bare RTP endpoint on all IPv4 interfaces:

          $ roc-recv -vv -s rtp://0.0.0.0:10001

       Bind source, repair, and control endpoints to all IPv4 interfaces (but not IPv6):

          $ roc-recv -vv -s rtp+rs8m://0.0.0.0:10001 -r rs8m://0.0.0.0:10002 \
              -c rtcp://0.0.0.0:10003

       Bind source, repair, and control endpoints to all IPv6 interfaces (but not IPv4):

          $ roc-recv -vv -s rtp+rs8m://[::]:10001 -r rs8m://[::]:10002 -c rtcp://[::]:10003

       Bind source, repair, and control endpoints to a particular network interface:

          $ roc-recv -vv -s rtp+rs8m://192.168.0.3:10001 -r rs8m://192.168.0.3:10002 \
              -c rtcp://192.168.0.3:10003

       Bind endpoints to a particular multicast address and  join  to  a  multicast  group  on  a
       particular network interface:

          $ roc-recv -vv -s rtp+rs8m://225.1.2.3:10001 -r rs8m://225.1.2.3:10002 \
              -c rtcp://225.1.2.3:10003 \
              --miface 192.168.0.3

       Bind two sets of source, repair, and control endpoints (six endpoints in total):

          $ roc-recv -vv \
              -s rtp+rs8m://192.168.0.3:10001 -r rs8m://192.168.0.3:10002 \
                  -c rtcp://192.168.0.3:10003 \
              -s rtp+rs8m://198.214.0.7:10001 -r rs8m://198.214.0.7:10002 \
                  -c rtcp://198.214.0.7:10003

   I/O examples
       Output to the default device (omit -o):

          $ roc-recv -vv -s rtp://0.0.0.0:10001

       Output to the default ALSA device:

          $ roc-recv -vv -s rtp://0.0.0.0:10001 -o alsa://default

       Output to a specific PulseAudio device:

          $ roc-recv -vv -s rtp://0.0.0.0:10001 -o pulse://alsa_input.pci-0000_00_1f.3.analog-stereo

       Output to a file in WAV format (guess format by extension):

          $ roc-recv -vv -s rtp://0.0.0.0:10001 -o file:./output.wav

       Output to a file in WAV format (specify format manually):

          $ roc-recv -vv -s rtp://0.0.0.0:10001 -o file:./output.file --output-format wav

       Output to stdout in WAV format:

          $ roc-recv -vv -s rtp://0.0.0.0:10001 -o file:- --output-format wav >./output.wav

       Output to a file in WAV format (absolute path):

          $ roc-recv -vv -s rtp://0.0.0.0:10001 -o file:///home/user/output.wav

       Specify backup file:

          $ roc-recv -vv -s rtp://0.0.0.0:10001 --backup file:./backup.wav

   Tuning examples
       Force a specific rate on the output device:

          $ roc-recv -vv -s rtp://0.0.0.0:10001 --rate=44100

       Select the LDPC-Staircase FEC scheme:

          $ roc-recv -vv -s rtp+ldpc://0.0.0.0:10001 -r ldpc://0.0.0.0:10002 \
              -c rtcp://0.0.0.0:10003

       Select lower session latency:

          $ roc-recv -vv -s rtp://0.0.0.0:10001 --sess-latency=50ms

       Select lower I/O latency and frame length:

          $ roc-recv -vv -s rtp://0.0.0.0:10001 \
              --io-latency=20ms --frame-length 4ms

       Manually specify thresholds and timeouts:

          $ roc-recv -vv -s rtp://0.0.0.0:10001 \
              --sess-latency=50ms --latency-tolerance=20ms \
              --no-play-timeout=200s --choppy-play-timeout=500ms

       Manually specify resampling parameters:

          $ roc-recv -vv -s rtp://0.0.0.0:10001 \
              --resampler-backend=speex --resampler-profile=high

       Manually specify clock synchronization parameters:

          $ roc-recv -vv -s rtp://0.0.0.0:10001 \
              --clock-backend=niq --clock-profile=gradual

SEE ALSO

       roc-send(1), and the Roc web site at https://roc-streaming.org/

BUGS

       Please report any bugs found via GitHub (https://github.com/roc-streaming/roc-toolkit/).

AUTHORS

       See authors page on the website for a list of maintainers and contributors.

COPYRIGHT

       2023, Roc Streaming authors