QStream Overview

Home

Documentation

Downloads

Contact Information

Links

Screen Shots

The QStream project is mainly about a video streaming. This is an overview of the major subcomponents that makeup the QStream software.

Some publications related to QStream can be found here:

http://www.cs.ubc.ca/~krasic/publications/

The QStream components

qvid

The QStream video streaming system consists of a number of modules which are linked together into a single program called qvid. qvid supports quality-adaptive streaming, using a scalable video format called SPEG, and a novel streaming protocol called Priority-Progress Streaming (PPS). The system also supports an overlay multicast streaming protocol extension to PPS called Priority-Progress Multicast (PPM).

The quality-adaptation in QStream is based on the notion of priority data dropping. An important aspect of the system is Priority-Mapping. Priority-mapping allows the quality-adaptation to be tailored according to explicit adaptation policies. These policies can reflect the needs of the content authors, target device, user preferences, or application task. Thus through dynamic, controlled quality-adaptation, qvid aims to make streaming as simple as encode once, stream anywhere.

The qvid program is contains both client and server code. In previous versions of QStream, there were separate programs for client and server (formerly called streamserv and xstreamplay). These were combined to support two-way conferencing.

The main functions of the server part of qvid are video retrieval, priority-mapping, and PPS transmission. The video retrieval can be either from a stored SPEG file, or it can capture from a webcam + mic and encode SPEG in real-time.

The client part of qvid contains the receiver side of the PPS protocol, as well as the other usual functions of a video player (decoding, display, etc.)

The qvid subdirectory of QStream also contains various test programs and utilities (such as avi2db).

qsf

The QStream Framework library (qsf). This library is used by rest of the QStream software described above.

Most of the programs in QStream are network applications. In order to balance throughput, scalability, and timeliness, the software adopts a reactive programming model, a specific flavor of event-driven program. The qsf provides a number of modules (event loop, asynchronous IO, tracing, etc.) that support QStream's reactive model.

mxtraf

A rather powerful and flexible network traffic generator. This application allows one to generate a tunable mix of network traffic, where the mix consists of specified amount of long-lived TCP flows (elephants), repeating short-lived TCP flows (mice), and non-responsive UDP traffic. One modern machines, mxtraf has been able to generate thousands of flows, and aggregate traffic rates in the gigabit range.

The initial purpose of mxtraf was to test QStream's streaming protocol (PPS) in conditions where the network is saturated with competing traffic. Mxtraf has also been used to study various aspects of TCP dynamics, and network server scalability.

qmon

A remote network monitor. Being a research system, the QStream software includes a very large amount of performance instrumentation. Much of this instrumentation feeds data to qmon, which stores it for later analysis (e.g. via gnuplot) and also presents it for real-time visualization with gscope (see below). The qvid and mxtraf programs use qmon extensively.

gscope

Gscope is library that provides a software oscilloscope widget based on the gtk+ GUI toolkit. GScope was developed by Ashvin Goel. The scope is the central widget in the qmon GUI.

For those interested in gscope, it should be noted that at least for now, the gscope project page at sourceforge is out of date. The version of gscope in the QStream subversion repository is the most current.

Last modified: Tue Feb 27 14:18:35 PST 2007