This repository contains upstream source code of UltraGrid from CESNET and SITOLA of Faculty of Informatics at Masaryk University. See Wiki tab or official website for more information about the software.
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
BlueVelvetC Added bluefish444 Feb 22, 2013
DeckLink DeckLink: updated Windows SDK Nov 15, 2016
ag_plugin Restructuralize directory structure Jul 2, 2012
cuda_dxt Fixed gcc 6.5 with CUDA 6.5 build fail Sep 8, 2014
data uv-qt.desktop: missing semicolon Sep 26, 2018
dxt_compress RTDXT: remove conflicting header Dec 12, 2018
gpujpeg @ 39fc447 Bump to new GPUJPEG Oct 19, 2018
gui/QT GUI: capture v4l2 always as a RGB Nov 13, 2018
hd-rum-multi Hd-rum-multi: added make install/uninstall Jan 2, 2018
ldgm Fixed few warnings Jul 24, 2018
package_specs PACKAGING: Release 1.5 Oct 4, 2018
redists Added support for Syphon Jul 31, 2015
rs Fixed few warnings Jul 24, 2018
share Support for arbitrary PAM overlay logo Apr 15, 2014
speex-1.2rc1 Added echo canceller Jun 29, 2012
src Video dec.: fixed tiled video into separated FB Jan 17, 2019
test Restructuralize directory structure Jul 2, 2012
tools Updated .gitignores Oct 18, 2018
unittest Added possibility to send message synchronously Aug 25, 2015
.gitignore Added unit tests (CppUnit) Aug 20, 2015
.gitmodules Use GPUJPEG submodule from GITHUB Feb 15, 2017
ADDING-MODULES Simplified adding modules to build system Oct 10, 2016
COPYRIGHT SDP: Serve the SDP file with embedded HTTP server Oct 18, 2018
Doxyfile Added Doxyfile Oct 12, 2016
INSTALL Copyright updates. Mar 7, 2018
MODS Restructuralize directory structure Jul 2, 2012 Added a simple C rang wrapper Dec 17, 2018
NEWS Updated NEWS Oct 4, 2018
NOTES.source Restructuralize directory structure Jul 2, 2012
README Copyright updates. Mar 7, 2018
README.GPUJPEG Added README how to compile GPUJPEG Jun 28, 2016
REPORTING-BUGS Updated links to new wiki on GitHub Jan 11, 2017 Removed submodule ldgm Nov 24, 2016 Win compile fix: aja_common.cpp is no longer present Dec 17, 2018 Added script to build GPUJPEG in MSYS2 (Win) Jul 16, 2018 Script to build 64b SPOUT Apr 24, 2018
coding_standards.html Added coding_standards.html Apr 24, 2015
config.guess configure clean up Mar 28, 2014
config.sub configure clean up Mar 28, 2014 Portaudio: print device host API used Dec 17, 2018 get_dll_depends: fixed DLL name parsing Sep 30, 2018
install-sh configure clean up Mar 28, 2014
logo.jpg Added Doxyfile Oct 12, 2016
missing configure clean up Mar 28, 2014 Updated script Jan 5, 2015


UltraGrid - A High Definition Collaboratory

   Copyright (c) 2001-2004 University of Southern California 
   Copyright (c) 2003-2004 University of Glasgow
   Copyright (c) 2013-2014 Fundació i2CAT, Internet I Innovació Digital a Catalunya
   Copyright (c) 2005-2018 CESNET z.s.p.o.
   All rights reserved.

   This software is distributed under license, see the file COPYRIGHT for
   full terms and conditions.

About UltraGrid
   UltraGrid brought by CESNET's Laboratory of Advanced Networking Technologies
   (Sitola) is a software implementation of high-quality low-latency video and
   audio transmissions using commodity PC and Mac hardware. Supported
   resolutions range through HD (1920x1080) up to 4K (4096x2160) with up to 60
   frames per second. The high-quality is achieved either by using uncompressed
   streams or streams with very low compression ratio. End-to-end transmission
   latency (i.e., all the way from the camera to the display) is about 100ms,
   but it varies based on camera and capture cards being used. UltraGrid was
   originally a research project used to demonstrate the possibilities of 10Gbps
   networks and to study multi-point data distribution in such environments.
   Recent advances in the field of GPU-accelerated low-latency codecs extend its
   usability also to Gigabit networks. UltraGrid is supported on PCs with Linux
   operating system and Macs with MacOS X. The software is open-source
   distributed under BSD license, i.e., we're interested in both
   research/academic and commercial applications. Nowadays, main application
   areas are collaborative environments, medical, cinematography and
   broadcasting applications, as well as various educational activities.

   It is a fork of the original UltraGrid developed by Colin Perkins, Ladan
   Gharai, et al..

   Our work is supported by CESNET research intents "Optical Network of National
   Research and Its New Applications" (MŠM 6383917201), CESNET Large
   Infrastructure (LM2010005), CESNET E-Infrastructure (LM2015042) and partially
   also by Masaryk University research intent "Parallel and Distributed Systems"
   (MŠM 0021622419). 

   The contents of this directory are as follows:

   	COPYRIGHT	Full license terms and conditions
   	INSTALL		Installation instructions
	NEWS		Change log and modification history
	README		This file
	REPORTING-BUGS	Recommendations for reporting bugs
	bin/		Compiled binaries
	src/		Source code for the UltraGrid system
	test/ 		Source code and binaries for test routines	Build script
	acconfig.h	"	"
	config.guess	"	"
	config.sub	"	"
	configure	"	"	"	"
	install-sh	"	"

Hardware and Software Requirements

    Recommended Hardware Setup:
        64-bit CPU with at least 2 cores
            Tested version: 2x 2-core Opteron CPUs,64-bit Ubuntu (both latest and LTS), Fedora, Debian and openSUSE 
        OpenGL3 - compatible card
            Proprietary drivers strongly recommended
            DXT compression on GPU is tested with OpenGL 3.3
            JPEG compression requires NVidia GeForce 4xx or newer
        For uncompressed 1.5Gbps streams (either sending or receiving), 10GbE network interface card is needed
            We test with PCIe Myrinet 10GbE 
        For SDI send/receive capabilities, DVS, DeckLink, Magewell or Linsys Quad card is required
            Magewell and Linsys modules in UG support only capturing 

        Video capture card should be located on a separate PCI bus from network card if possible.

    Required Software Preliminaries
        You will need this software (in brackets are optional features for which you'll need it):

            X.Org and ATI/NVidia proprietary drivers (receiver - OpenGL/SDL display, sender - RTDXT compression)
            SDL (SDL display)
            OpenGL (RTDXT sender or OpenGL display on receiver)
            GLEW library (DXT sender)
            DVS SDK/Blackmagic drivers/Quad drivers 

            devel packages need to be installed as well 
        DVS SDK or VideomasterHD from Deltacast need to be obtained separately
        because it cannot be distributed with UltraGrid (license). Please refer
        our wiki for further information (

Using the UltraGrid System

   The file INSTALL gives instructions for building the UltraGrid system. 
   Once the system has been built, the "uv" binary will be present. This
   can be invoked as follows:

   	uv -d <display_device> -m <mtu> hostname	(on the receiver)
	uv -t <capture_device> -m <mtu> hostname        (on the sender)

   The <display_device> is one of the list viewed with '-d help'.

   The <capture_device> is one of the list viewed with '-t help'. Name
   of capture device usually follows with configuration of video mode,
   video input etc. All options can be interactivelly shown.

   The <mtu> specifies the maximum transfer unit of the network path from
   sender to receiver (the default MTU is 1500 octets, suitable for use on
   standard Ethernets). This parameter allows the application to make use
   of networks with larger MTU, for example gigabit Ethernet using jumbo

   Further options follow UltraGrid command-line help (-h) or visit our wiki
   for further information (

   As an example, if a user on host "ormal" wishes to send video captured
   using a DVS HDstation card at 60 frames per second to another user on
   host "curtis" with a display using the OpenGL driver, then the user on host
   "ormal" would run where 38 indicates video format (here 1080i@30fps) and
   2vuy tells it is an 8-bit YUV codec (also 10-bit is possible):

   	uv -t dvs:38:2vuy curtis

   while the user on "curtis" would run:

   	uv -d gl ormal

   The system requires access to UDP ports 5004 and 5005: you should open
   these ports on any firewall on the network path. Uncompressed high definition
   video formats require approximately 1 Gigabit per second of network capacity.
   Using different supported compression schemes, the needed network capacity
   can be as low as 10 Megabits per second for a high definition video.

Performance Tuning: Network

   To achieve optimum performance with high definition video, it may be
   necessary to tune your system's network parameters to more aggressive
   values than used by default.  

   A key factor affecting performance is the path MTU. It is unlikely that
   the system will sustain gigabit rates with the 1500 octet Ethernet MTU. 
   If using a gigabit Ethernet you may be able to improve performance by
   setting an 8192 octet MTU on the interface, provided all intermediate
   hops on the path from sender to receiver support the large MTU. 

   UltraGrid attempts to increase the UDP receive socket buffer from the
   default value (typically 64 kilobytes) to 4/6 megabytes. If successful,
   this will make the system more robust to scheduling variations and
   better able to accept bursty packet arrivals. UltraGrid will notify
   you if it cannot increase buffers. You should follow those instructions
   and set your system according to it.

   Interrupt processing load on the receiver host may be significant when
   running at high rates. Depending on your network interface hardware it
   may be possible to coalesce interrupts to reduce this load, although
   the settings to do this are highly driver dependent. On FreeBSD, the
   use of network device polling may also help performance: see the man
   page for "polling" in section 4 of the manual.

   In many cases, the performance of your network interface card may be
   limited by host bus performance (this is particularly an issue at high
   rates, for example when using HD format video).

Performance Tuning: Display devices

   If using a HW grabbing card (eg. DVS) as a display device, the
   key factor limiting performance is PCI bus contention. Ensure that
   the grabbing card is on a separate PCI bus to the network card --
   this typically requires a server class motherboard. On Linux, the
   PCI bus topology can be displayed using "lspci -tv", for example:

	[root@ormal root]# lspci -tv
	-+-[03]---06.0  Xilinx, Inc.: Unknown device d150
	 +-[01]-+-02.0-[02]--+-04.0  Adaptec 7899P
	 |      |            \-04.1  Adaptec 7899P
	 |      \-0e.0  3Com Corporation 3c985 1000BaseSX
	 \-[00]-+-00.0  ServerWorks CNB20HE
		+-00.1  ServerWorks CNB20HE
		+-00.2  ServerWorks: Unknown device 0006
		+-00.3  ServerWorks: Unknown device 0006
		+-04.0  Intel Corporation 82557 [Ethernet Pro 100]
		+-0e.0  ATI Technologies Inc Rage XL
		+-0f.0  ServerWorks OSB4
		\-0f.1  ServerWorks: Unknown device 0211
	[root@ormal root]# 

   showing an DVS card on PCI bus [03] (the card shows as a Xilinx
   device) and a gigabit Ethernet card on PCI bus [02] (the 3Com entry).

   For software display, you can use SDL or OpenGL display. Both are
   accelerated (Mac and Linux) if you have properly configured video
   drivers. On Linux, basic operability can be checked with following
   commands. If configured properly, both should display driver
	[root@ormal root]# glxinfo
        <-- output omitted -->
   and for SDL (accelerated through XVideo:
	[root@ormal root]# xvinfo
        <-- output omitted -->

   If you intend to use some of DXT compressions, recommended driver
   is OpenGL, which can display it natively. When using other display
   drivers, decompression is still done throught OpenGL and then displayed
   with requested video driver.

Performance Tuning: Other Factors

   The UltraGrid system will attempt to enable POSIX real-time scheduling
   to improve performance. This behaviour is disabled by default now, because
   it can occupy the whole system when enabled, but it can be stil enabled by
   '--enable-rt' configure option. If you see the message:

	WARNING: Unable to set real-time scheduling

   when starting the application, this means that the operating system did
   not permit it to enable real-time scheduling. The application will run,
   but with reduced performance. The most likely reason for failure to set
   realtime scheduling is that the application has insufficient privilege:
   it should either be run by root, or be made setuid root. A similar

   	WARNING: System does not support real-time scheduling

   indicates that your operating system does not support POSIX real-time
   scheduling. The application will still run, but performance may be less
   than desired.

   You can find more operating system tweaks at this page:

				  - * -