-
Notifications
You must be signed in to change notification settings - Fork 56
Reflector settings
UltraGrid is bundled with a packet reflector. There are multiple flavors of reflector:
-
a simple packet reflector that retransmits a received flow to multiple recepients; has minimal dependencies but it cannot be compiled in Windows
-
a superset of hd-rum in terms of features (it supports packet retransmit as well) but has extensive dependencies (basically the same as UltraGrid).
-
hd-rum-av
a wrapper around hd-rum-transcode which respawns 2 instances to handle both audio and video. The control is similar to hd-rum-transcode; special modes are supported as well (conference, server mode).
Hd-rum is a simple packet reflector which is located in directory hd-rum-multi (comes with own Makefile, doesn't support Windows).
Syntax is as following:
hd-rum 8M 5004 receiver1 receiver2 ...
where 8M is buffer size and 5004 port (default UltraGrid video port). For audio you'd need use reflector for UltraGrid audio port as well (default is 5006):
hd-rum 8M 5006 receiver1 receiver2 ...
Note: If using the reflector on the same machine as UltraGrid receiver see also Port setting.
The other reflector, called hd-rum-transcode, is more powerful. It is capable of transcoding the received video as well as simply retransmitting packets (in a similar way as hd-rum does). It is compiled automatically alongside UltraGrid.
Transcoding occurs when -c parameter (compression) is specified in host options. Usage is:
hd-rum-transcode <global_opts> 8M 5004 <host1_opts> <host1> <host2_opts> <host2> ... <hostn_opts> <hostn>
Note: As for legacy hd-rum, hd-rum-transcode only retransmits/transcodes selected port (here 5004). Because UltraGrid uses different ports for video and audio (5004 and 5006 by default, +2 for audio in general), reflector needs to be run for both, therefore one instance for video and the other for audio.
Note 2: Transcoding is currently not supported for the audio, so the reflector must be run in retransmitting mode.
Sample usage is:
hd-rum-ranscode 8M 5004 \
-c libavcodec:codec=H.264 receiver1 \
receiver2 \
-m 9000 -c GPUJPEG receiver3 # video
hd-rum-transcode 8M 5006 receiver1 receiver2 receiver3 # audio
In this setup, first two arguments are mandatory with following meaning:
- buffer size (here 8M, so 8 MBytes)
- port to listen to
Furthermore:
- receiver1 receives video transcoded to H.264
- receiver2 receives unaltered data as it is sent by sender to reflector
- receiver3 gets JPEG data in with Jumbo frames
- receiver1, receiver2 and receiver3 receive audio retransmitted from sender
Options are (always precede host address which they relate to):
- -P - TX port to be used (if not specified RX is used)
- -c - compression
Following options will be used only if '-c' parameter is set:
- -m - MTU size
- -l <limiting_bitrate> - bitrate to be shaped to
- -f - FEC that will be used for transmission.
For more info refer to this page.
Note: If using the reflector on the same machine as UltraGrid receiver see also Port setting.
UltraGrid receiver by default binds to port 5004
for video and 5006
for audio. So running a receiver and a reflector on a single machine like this:
hostA $ uv -t testcard -d gl -s testcard -r portaudio localhost
hostA $ hd-rum 8M 5004 hostB hostC
hostA $ hd-rum 8M 5006 hostB hostC
won't work since both UG receiver and reflectors bind to same ports. Explicit port mapping is then needed:
hostA $ uv -t testcard -d gl -s testcard -r portaudio -P 5004:6004:5006:6006 localhost
^ ^ ^ ^
RXvid TXvid RXaud TXaud
hostA $ hd-rum-transcode 8M 6004 -P 5004 hostB -P 5004 hostC
hostA $ hd-rum-transcode 8M 6006 -P 5006 hostB -P 5006 hostC
(Transcoding reflector here is selected because it allows port remmaping /6004->5004, 6006->5006/.)
Note: The above is needed only if UG receiver is on the same machine as reflector(s). If the UltraGrid is sender only or the reflector are on different machine, this is not required.
If you have any technical or non-technical question or suggestion please feel free to contact us at