\section{Experimental Results} We carried out several experiments over the Internet. Our test data set consisted of four MPEG movies, digitized at rates ranging from 5 to 9 fps, with pixel resolution ranging from 160 by 120 to 320 by 240. Table~\ref{table:movies} tabulates the test videos. The videos ranged from a short 14 second segment to one of several minutes duration. In order to observe the playback video quality, we based the client side of all our tests in our laboratory in Urbana, Illinois, USA. In order to cover the widest possible range of configurations, we set up servers corresponding to local, regional and international sites relative to our geographical location. We used a server at the National Center for Supercomputing Applications (NCSA) for the local case. NCSA is connected to the local campus network via Ethernet. For the regional case, we used a server at the University of Washington on the east coast of North America, in Washington State. Finally, a copy of our server was set up at the University of Oslo in Norway to cover the international case. Table~\ref{table:config} lists the names and IP addresses of the hosts used for our experiments. \begin{table}[hbt] \begin{center} \begin{tabular}{|l|c|c|c|c|} \hline {\bf Name} & {\bf Frame Rate (fps)} & {\bf Resolution} & {\bf Number Of Frames} & {\bf Play Time (secs)} \\ \hline model.mpg & 9 & $160 \times 120$ & 127 & 14 \\ startrek.mpg & 5 & $208 \times 156$ & 642 & 128 \\ puffer.mpg & 5 & $320 \times 240$ & 175 & 35 \\ smalllogo.mpg & 5 & $320 \times 240$ & 1622 & 304 \\ \hline \end{tabular} \end{center} \caption{MPEG test movies.} \label{table:movies} \end{table} \begin{table} \begin{center} \begin{tabular}{l|l|l} {\bf Name} & {\bf IP Address} & {\bf Function}\\ \hline indy1.cs.uiuc.edu & 128.174.240.90 & local client\\ showtime.ncsa.uiuc.edu & 141.142.3.37 & local server \\ agni.wtc.washington.edu & 128.95.73.229 & regional server \\ gloin.ifi.uio.no & 129.240.106.13 & international server \\ \end{tabular} \end{center} \caption{Hosts used in our tests.} \label{table:config} \end{table} \begin{table} \begin{center} \begin{tabular}{|l|c|c|c|} \hline {\bf Name} & {\bf \% Dropped Frames} & {\bf Jitter (ms)} \\ \hline model & 0 & 8.5 \\ startrek & 0 & 5.9 \\ puffer & 7.5 & 43.6 \\ smalllogo & 0.5 & 22.5 \\ \hline \end{tabular} \end{center} \caption{Local test.} \label{table:local} \end{table} \begin{table} \begin{center} \begin{tabular}{|l|c|c|} \hline {\bf Name} & {\bf \% Dropped Frames} & {\bf Jitter (ms)} \\ \hline model & 0 & 46.3 \\ startrek & 0 & 57.1 \\ puffer & 0 & 34.3 \\ smallogo & 0.2 & 50.0 \\ \hline \end{tabular} \end{center} \caption{Regional test.} \label{table:regional} \end{table} \begin{table} \begin{center} \begin{tabular}{|l|c|c|} \hline {\bf Name} & {\bf \% Dropped Frames} & {\bf Jitter (ms)} \\ \hline model & 0 & 20.1 \\ startrek & 0 & 22.0 \\ puffer & 19 & 121.4 \\ smallogo & 0.8 & 46.7 \\ \hline \end{tabular} \end{center} \caption{International test.} \label{table:international} \end{table} Tables~\ref{table:local}, \ref{table:regional}, and \ref{table:international} show the results for sample runs using the test videos by our Web client accessing the local, regional and international servers respectively. Each test involved the Web client retrieving a single MPEG video clip. We used an unloaded SGI Indy as the client workstation. The numbers give the average frame drop percentage and average application-level inter-frame jitter in milliseconds for thirty test runs. Frame rate changes due to the adaptive algorithm was seen in only one run. That run used the {\bf puffer.mpg} test video in the international configuration (Oslo, Norway to Urbana, USA). The frame rate dropped from 5 fps to 4 fps at frame number 100, then increased from 4 fps to 5 fps at frame number 126. The rate change indicated that transient network congestion caused the video to degrade for a 5.2 second period during the host's transmission. The results indicate that the Internet can in fact support a video-enhanced Web service. Inter-frame jitter in the local configuration is negligible, and below the threshold of human observability (usually 100 ms) in the regional case. Except for the {\bf puffer.mpg} runs, the same holds true for the international configuration. In that case, the adaptive algorithm was invoked because of dropped frames and the video quality was degraded for a 5.2 second interval. The VDP buffer queue efficiently minimizes frame jitter at the application level. Our last test exercised the adaptive algorithm more strongly. We used the local configuration and retrieved a version of {\bf smalllogo.mpg} recorded at 30 fps at a pixel resolution of 320 by 240. This is a high quality video clip at a medium size, requiring significant computing resources for playback. Figure~\ref{figure:adaptive-graph} shows a graph of frame rate versus frame sequence number for the server transmitting the video. The client side buffer queue was set at 200 frames, corresponding to about 6.67 seconds of video. The buffer at the client side first fills up, and the first frame is handed to the application at frame number 200. The client workstation does not have enough processing capacity to decode the video stream at the full 30 fps rate. The client side protocol detects a frame loss rate severe enough to report to the server at frame number 230. Our current criteria for degrading the transmission is when the frame loss rate exceeds 15\%. The transmission is upgraded if the loss rate is below 5\%. The server begins degrading its transmission at frame number 268, that is, within 1.3 seconds from the client detecting that its CPU was unable to keep up. The optimal transmission level was reached in 7.8 seconds, corresponding to a 9 frame per second transmission rate. Stability was reached in a further 14.8 seconds. The deviation from optimal did not exceed 3 frames per second in either direction during that period. The results show a fundamental tension between large buffer queue sizes that minimize jitter and server response times. The test with very high quality video at 30 fps with a frame size of 320 by 240 represents a pathological case. However, the results show that the adaptive algorithm is an attractive way to reach optimal frame transmission rates for video in the WWW. The test implementation changes the video quality by 1 frame per second at each iteration. We are experimenting with non-linear schemes based on more sophisticated policies.