vic - Video Conferencing Tool
Vic is a video conferencing application developed by the
Network Research Group
Lawrence Berkeley National Laboratory
in collaboration with the
University of California, Berkeley.
Source code and pre-compiled binaries are available via
Vic-related questions and feedback are welcome and can be sent
to the developers via email@example.com.
The UCB/LBNL video tool, vic, is a real-time, multimedia application
for video conferencing over the Internet.
Vic was designed with a flexible and extensible architecture to support
heterogeneous environments and configurations. For example, in high
bandwidth settings, multi-megabit full-motion JPEG streams can be
sourced using hardware assisted compression, while in low bandwidth
environments like the Internet, aggressive low bit-rate coding can
be carried out in software.
Vic is based on the Draft Internet Standard
Real-time Transport Protocol (RTP) developed by the IETF
Audio/Video Transport working group.
RTP is an application-level protocol implemented entirely within
vic -- you need no special system enhancements to run RTP. Although
vic can be run point-to-point using standard unicast IP addresses,
it is primarily intended as a multiparty conferencing application.
To make use of the conferencing capabilities, your system must support
IP Multicast, and ideally, your network should be connected to the
IP Multicast Backbone (MBone).
Vic also runs over
RTIP, the experimental real-time networking protocols
from U.C. Berkeley's Tenet group
and over ATM using
Fore's SPANS API.
Vic provides only the video portion of a multimedia conference; audio,
whiteboard, and session control tools are implemented as separate
applications. Our audio tool is called
our whiteboard tool
UCL developed the session directory tool
Other related applications include ISI's Multimedia Conference Control,
the Xerox PARC Network Video tool,
and the INRIA Video-conferencing System,
Vic is backward compatible with RTPv1 and can interoperate with both
nv (v3.3) and ivs (v3.3).
Features unique to vic include:
encoder combines the advantages of nv's block-based conditional
replenishment scheme (i.e., robustness to loss) with those of H.261
(i.e., higher compression gain and compatibility with hardware codecs).
This is achieved by coding only ``intra-mode'' macroblocks and using
macroblock skip codes to replenish only the blocks that change.
For a fixed bit rate, the H.261 coder achieves frame rates
typically 2-4 times that of the nv coding format.
- an ``Intra-H.261'' video encoder,
- voice switched viewing windows,
- multiple dithering algorithms,
- interactive ``title generation'', and
- routing of decoded video to external video ports.
Vic allows viewing windows to be configured
to ``follow the speaker''. Using cues from vat, vic will switch
the viewing window to whoever is speaking. More than
one window can be configured in this manner, which causes the
most recent N speakers to be displayed.
Vic has several dithering algorithms for representing
continuous-tone color video streams on color-mapped displays.
The user can trade of run-time complexity with quality.
An error-diffusion dither gives the highest quality but
at the greatest CPU cost, while a direct color quantization
results in the lowest CPU load but yields relatively low quality.
An ordered dither (derived from nv) gives moderate
quality with low complexity.
Vic exports an interface that allows graphics to be easily composited
on top of the captured video. Overlays can be downloaded and
manipulated across the ``Conference Bus'' allowing a ``production team''
to enhance a broadcast with titles, credits, logos, etc. Since the
conference bus can be manipulated using tcl, it's easy to extend existing
scripts or create new scripts for on-the-fly title generation.
See the ``title-maker'' script in the vic distribution for an example
of how to do this.
Video streams can be displayed simulatanously on a workstation display
and on an external video output port, provided your hardware supports
external output. This allows you to render a single stream to a
full-sized NTSC/PAL analog video signal, which when viewed on an
external monitor (or video projector) generally provides a more
comfortable picture compared to video displayed in a small X window.
The easiest way to install vic is to grab the
for your architecture, unpack it, and install the executable and
You can also build vic from source. Start by unpacking the gzip'd
source tar, e.g., by running
This will place the contents of the source distribution
in ./vic-x.y where ``x.y'' is the current version number.
``cd'' into this directory and do the following:
-d -c vicsrc-tar.gz | tar xfv -
- Make sure
tcl/tk (v7.5/4.1) is installed or built in the directory
above the vic tree.
- Run the ./configure script.
You may specify the following arguments to configure:
||specify a pathname for the X include tree
||specify a pathname for the X libraries
||specify a pathname for tcl
||specify a pathname for tk
||specify a pathname for the AIX shm extension library
If you run into problems with configure, you should edit configure.in
instead of configure and use
to generate a new configure from configure.in. If you need to make
such changes, please send them to us so future versions of vic
will configure out of the box.
- Run make.
- If make completes successfully, run ``make install'' as root
to install the binary and man page.
||jvideo, Xv (tx/pip)
||vl, IndigoVideo, cosmo
Matrox Meteor,video spigot
||IBM PCMCIA Smart Capture Card (SCC)
Ultimedia Video I/O Adaptor
|RS/6000, PCI (40P,43P)
||Parallax (PCI adaptor)
- For the DEC/j300, you will need
Lance Berc's video server called
vic does not work with DEC's MME server.
- Remember to run jv2driver with the right command-line options
if your using the svideo connector (-sin) or PAL video (-pal).
- Solaris-2 has small limits on shared memory segments. If you
want to display full sized 24-bit video windows and more than
one or two, add these lines to /etc/system and reboot:
If you have a cg14 frame buffer (the built-in frame buffer
on sparc-20), it's a good idea to run
- set shmsys:shminfo_shmmax=2097152
- set shmsys:shminfo_shmseg=24
from your X startup script. The default display gamma
is not appropriate for video (even though the man page
says the default is 2.2).
- /usr/kvm/cg14config -g 2.2
- If you're running SunOS, the shared memory limit is also low,
but not as bad as Solaris. You can change it by adding an
to the system config file or adb'ing the kernel & changing the first
word of shminfo to 2097152.
- BSD/OS 2.0
now includes a library to support the svr4 shared
memory API via
Unfortunately, their X server is not
shipped with the X Shared memory extension compiled in.
To get reasonable display performance with vic, you'll need
to recompile the X server with this extension.
- To use shared memory under AIX, you need to compile one of the
sample extensions provided with AIX and start the X server with
that extension loaded. When building vic from source, you need
to specify --with-aix-shm=libpath to set the pathname of the
extension library (that also needs to be compiled from the exmaple
codes). If --with-aix-shm isn't provided, vic will be built
without shared memory support (and hence pay a big performance
hit when rendering video to X windows). (Thanks to
for bringing up vic is this environment.)
Bob reports that with the shared memory support in place,
a 1T (PowerPC 601 box) can decode 320x240 JPEG at 30fps in
software (with q up to about 70).
Andrew Booker and
Kira Attwood have made
- The default BSD/OS make doesn't like vic's Makefile.
Just use gmake (which is probably installed).
- There are two versions of vic for Solaris: vic and vic.xil.
The vic.xil binary uses Sun's XIL library for video capture,
while vic.rtvc bypasses the library and manipulates the device
directly. The rtvc version is faster, but because it doesn't
use the standard API, it might not work in future Solaris or
XIL releases. The vic.xil binary is built with only xil
support, while the vic binary supports all available capture devices.
- Amancio Hasty
has put together a
for the MBone tools under FreeBSD.
Check it out. Thanks to
vic supports both the Matrix Meteor board and the video spigot
ftp://ftp.cs.uwm.edu/pub/FreeBSD/meteor* for the Matrox
for the video spigot.
- John Brezak has ported
vic to Windows 95/NT (January 31, 1996). He says:
- Run "nmake -f vic.mak" to compile.
- Known problems and limitations:
- Untested on mono displays
- Need to handle case where IP_MULTICAST_LOOP cannot
be turned off. The default Win95 TCP/IP stack has
- There are some colormap problems in pseudo color/8.
This appears to be a Tk problem.
- Changing color mapping methods can cause an exit on PseudoColor/8
- No grabber support.
- Should use VideoX interface for higher performance.
- Koji OKAMURA
SCC Driver for Linux and Linux
vic binaries w/ SCC support.
This work was co-sponsored by the the Lawrence Berkeley Laboratory
and the Tenet Group of the University of California Berkeley and of
the International Computer Science Institute. Support was provided by
- an AT&T Graduate Fellowship;
- for the Lawrence Berkeley National Laboratory:
- for the Tenet Research Group:
- the National Science Foundation and the Advanced
Research Projects Agency (ARPA) under Cooperative
Agreement NCR-8919038 with the Corporation for
National Research Initiatives, and
- Digital Equipment Corporation.
As always, we very much want to hear about bugs and problems. Please
don't hesitate to offer suggestions or other feedback. Send all vic
related correspondence to firstname.lastname@example.org
(this list includes only the developers and is not distributed beyond
Steven McCanne (email@example.com)
Van Jacobson (firstname.lastname@example.org)