UCB/LBNL Video Conferencing Tool (vic)

# vic - Video Conferencing Tool

Vic is a video conferencing application developed by the Network Research Group at the Lawrence Berkeley National Laboratory in collaboration with the University of California, Berkeley. Source code and pre-compiled binaries are available via anonymous ftp. Vic-related questions and feedback are welcome and can be sent to the developers via vic@ee.lbl.gov.

## Contents

- Overview
- Features
- Installation
- Supported Systems
- Notes
- Acknowledgments
- Feedback to authors

Other links:

- What's new?
- The FTP archive
- Browse the change history
- Research Projects
- Screen dump of user-interface
- McCanne, S., and Jacobson, V., vic: A Flexible Framework Framework for Packet Video, ACM Multimedia '95.
- FreeBSD MBone Tools
- Linux MBone tools

### Overview

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 vat and our whiteboard tool wb. UCL developed the session directory tool sdr. Other related applications include ISI's Multimedia Conference Control, mmcc, the Xerox PARC Network Video tool, nv and the INRIA Video-conferencing System, ivs. Vic is backward compatible with RTPv1 and can interoperate with both nv (v3.3) and ivs (v3.3).

### Features

Features unique to vic include:

- 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.

The Intra-H.261 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.

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.

### Installation

The easiest way to install vic is to grab the binary distribution. for your architecture, unpack it, and install the executable and manual entry. You can also build vic from source. Start by unpacking the gzip'd source tar, e.g., by running

- gzip -d -c vicsrc-tar.gz | tar xfv -

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:

- 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:

  -x-includes=path | specify a pathname for the X include tree
  -x-libraries=path | specify a pathname for the X libraries
  -with-tcl=path | specify a pathname for tcl
  -with-tk=path | specify a pathname for tk
  -with-aix-shm=path | 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 GNU autoconf 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.

### Supported Systems

sparc | SunOS 4.x | videopix, vigrapix, parallax
sparc | Solaris 2.4 | sunvideo, vigrapix, parallax, slv
sparc | NetBSD 1.x | none
DEC/MIPS | Ultrix 4.3 | jvideo, Xv (tx/pip)
DEC/AXP | OSF/1 v3.x | j300, jvideo
SGI | IRIX 5.x | vl, IndigoVideo, cosmo
i386 | BSD/OS | none (yet)
i386 | FreeBSD | Matrox Meteor,video spigot
i386 | Linux | Connectix QuickCam
i386 | Linux | IBM PCMCIA Smart Capture Card (SCC)
HP/PA | HP-UX 9.x | Xv
RS/6000, microchannel (3xx,4xx,9xx,41W/T,42W/T) | AIX 3/4 | Ultimedia Video I/O Adaptor
RS/6000, PCI (40P,43P) | AIX 4 | Parallax (PCI adaptor)

### Notes

- For the DEC/j300, you will need Lance Berc's video server called jvdriver. 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:
  - set shmsys:shminfo_shmmax=2097152
  - set shmsys:shminfo_shmseg=24
  If you have a cg14 frame buffer (the built-in frame buffer on sparc-20), it's a good idea to run
  - /usr/kvm/cg14config -g 2.2
  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).
- 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 "options SHMSIZE=2048" 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 mmap. 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 Bob Olson 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 AIX binaries publicly available
- 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 web page for the MBone tools under FreeBSD. Check it out. Thanks to Jim Lowe, vic supports both the Matrix Meteor board and the video spigot under FreeBSD. See ftp://ftp.cs.uwm.edu/pub/FreeBSD/meteor* for the Matrox and href=ftp://ftp.cs.uwm.edu/pub/FreeBSD/spigot/ 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 this limitation.
    - 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 displays.
    - No grabber support.
    - Should use VideoX interface for higher performance.
- Koji OKAMURA maintains an SCC Driver for Linux and Linux vic binaries w/ SCC support.

### Acknowledgments

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:
  - Office of Energy Research, Mathematical, Information, and Computational Sciences Division, of the U.S. Department of Energy under Contract No. DE-AC03-76SF00098,
  - Sun Microsystems,
  - Digital Equipment Corporation, and
  - Silicon Graphics Inc.
- 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.

### Feedback

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 vic@ee.lbl.gov (this list includes only the developers and is not distributed beyond our site).

Steven McCanne (mccanne@ee.lbl.gov)
Van Jacobson (van@ee.lbl.gov)