This article explains how Linux is used in the ViewSurf “Beach Report”, a fun WebCAM-based service.
The raison d’être of ViewSurf is to give surfers access to up-to-date on-line weather reports. Classic weather report information is provided, such as temperature and wave status, but the bonus is an up-to-date video that gives the surfer a current picture of what is happening at his favourite beach.
I met the creator of ViewSurf (Nicolas Saubade) during the summer of 1996. Nicolas works for COM1 in Cestas near Bordeaux, France. COM1 is a very famous company in France because it’s the foremost modem manufacturer in Europe even though most COM1 modems are not distributed under its own label. Additionally, COM1 develops and distributes the ViewCOM, a high performance video compressing system used in many security applications (see Figure 1).
Figure 1. ViewCOM VM3
The ViewCOM uses a standard video input, such as a video camera or any PAL/SECAM/NTSC source, and converts this source to a proprietary format based on the JPEG compression algorithm. This format is called VCR, and the conversion can be achieved in real-time. The ViewCOM includes a V34 PC-Card modem, so it is typically installed on a foreign site and called by specialized software running under Microsoft Windows (ViewCOM Manager) via a simple phone line.
ViewCOM firmware includes a recording function to create a compressed video sequence and send it to the caller via modem. The size of each sequence is 100KB to 400KB and running time is 1 or 2 minutes of video.
Figure 2. ViewSurf basic configuration
The basic configuration of the ViewSurf service is quite simple (see Figure 2). Each site has a video camera connected to a ViewCOM. The ViewCOM is directly accessible via modem. The caller records a short film segment and uploads it to a web server. For the Beach Report, this operation occurs about three times a day. The browser on the client side must download a plug-in from the COM1 web site in order to display VCR sequences. This plug-in originally existed only for Microsoft Windows and Macintosh, so I wrote a UNIX/Linux version which is now on the COM1 site (available for Linux ELF, Solaris and SunOS).
Nicolas wanted to install several sites, but it was quite difficult to manage because the ViewCOM Manager, a nice graphical program, is not really programmable—the problem with most Windows applications. He had to manually call four sites, three times a day, seven days a week—not an acceptable situation.
I proposed to him that Linux be used to automate the process. I wrote some simple shell scripts to call each site, create and download the film and copy it to the main web server (an SGI Indy) using the rcp command. Most of these scripts are based on the chat program. The download portion was written in C to keep up with the high speed on the serial line (57,600 or 115,200Kbps).
I know rcp is not the best solution; Linux is a very good web server system in its own right, but the SGI was already in place. Film is integrated in ViewSurf pages with HTML code such as:
<EMBED SRC="http://your_linux_server/films/film.vcr" WIDTH=320 HEIGHT=40>
Actually, using rcp requires no HTML modification in the existing pages, which is an advantage, so we opted to stay with it.
The main shell scripts, including dial up to a group of sites, are simply activated by a crontab entry. Additionally, these scripts give some statistics about ViewCOM access in order to detect any problems.
This project was not an official COM1 project, so the software was installed on a very old DX2/66 running Slackware 3.0. We had to buy a new 16550A-based ISA card for the serial line.
The ViewCOM Manager was no longer needed for ViewSurf. Nicolas was surprised by the power of Linux—all I had to do to solve a problem was write some shell scripts using standard Linux commands, which would have been very difficult and costly to implement in Windows. Some months later, Nicolas created a Snow Report, which is a service for skiing information comparable to the Beach Report. Last winter, 3 ViewCOMs were installed in the French Pyrénées mountains.
Nicolas has written some additional HTML pages in order to make the service more attractive, and ViewSurf now includes interesting links to fun sites and tourist WebCAMs all around the world. A specific domain now exists for ViewSurf (viewsurf.com), and the service is available (in French) at http://www.viewsurf.com/. Figure 3 is an example of a ViewSurf page. Don’t forget to download the VCR plug-in.
Figure 3. Hossegor Beach (France)
Actually, the Linux PC is very efficient and robust. The last time I had to reboot it was to install a new kernel version.
The Future of ViewSurf
Beach Report and Snow Report are free services for the end user, but Nicolas created ViewSurf in the hope of making some money with it. He’s currently trying to sell the service to French Tourism Offices, but it’s quite hard; basically, France is lagging in communications and Internet services. Additionally, many French people consider computers and the Internet as American Trojan horses such as McDonald’s or Disneyland Paris.
Most French on-line services are available for a low performance Videotex-compatible terminal called Minitel, which was distributed free of charge by France Telecom at the beginning of the 1980s. This technology is obsolete, but France Telecom is currently the only French operator for communications. The Minitel allows them to charge up to several dollars per minute for some on-line services. This could be the reason why most French people don’t have a PC at home, and as a result, Internet-based services are not seriously considered.
Nicolas has gotten a contract with the government organization which deals with traffic regulation in Paris. Some French highways have been on the Net since September 1997. If you compare it with other WebCAM systems, ViewSurf gives very good quality for a small data size.
This software would be more easily configurable without editing crontab or shell scripts each time you wished to change the call time or add a new site. To that end, I wrote a set of CGI (Common Gateway Interface) scripts which present a simple and portable interface for the Linux server configuration. The advantage of using CGI instead of standard Linux programs is the capability to configure the server from any forms-capable browser running on any operating system.
Another crucial option is to have the ability for several users to look at a “live” video (not recorded files) at the same time. For this, the Linux PC could be used as a server to distribute the live image from ViewCOM to several users connected from the Net. To reach this goal, I wrote a multi-threaded Linux daemon, based on the POSIX 1003.1c LinuxThreads library by Xavier Leroy (http://pauillac.inria.fr/~xleroy/linuxthreads). Actually, this daemon handles only the “video/x-vcr” MIME type and uses two specific TCP ports. The live video can be inserted in an HTML page with a line such as:
<EMBED SRC="http://your_linux_server:daemon_port" WIDTH=320 HEIGHT=240>
The second port is reserved for ViewCOM administration, such as setting brightness or contrast. Additionally, the daemon can control a weather station in order to get real-time information about external temperature, wind speed and other weather information. A VISCA (a standard for video camera remote control) functionality is about to be added to control zoom, pan-and-tilt and other camera parameters directly from the Internet browser. Figure 4 is a snapshot of the Bordeaux/Bayonne motorway on the private COM1 web server.
Figure 4. Snapshot of Bordeaux/Bayonne Motorway
The ViewCOM is often connected to the PC via a serial line, but one of the most important advantages of the system could be the ability to control a remote ViewCOM. So, it’s not necessary to install a PC on the site you want to look at, you just have to set up a ViewCOM connected to a simple phone line or a leased line. In the phone line case, it’s possible for the daemon to call the ViewCOM at starting time or only when an HTTP request occurs. In this last case, the daemon hangs up the line when the last client is disconnected.