This page has moved to a permanent new location. The Home Page of Vikram Aggarwal is now available at www.eggwall.com. Please update your bookmarks, if you need to.























































Vikram Aggarwal

Live Webcam with Linux and Free Software

Abstract: How to make a live webcam feed using freely available software. The clients do not need anything except a browser which is reasonably standards compliant.

Why?

We first begin with the motivation for this project. Why would someone spend time and effort in putting a live webcam feed of his house? There are several motivations, and you might have your own.

What do I need

The basic list of requirements is quite small.

Alright, so that's all the hardware you need. If you have a webcam which is not supported, and you have bought it from the store, you might be able to return it for a full refund.

Setup

The setup follows many steps, with a checkpoint at the end of a step. If you cannot complete a checkpoint, stop, and rectify the error before proceeding.

  1. Install Linux with editors (emacs/vi), compilers (gcc), and the X-windows environment on your computer. The choice of desktop does not matter. Verify this setup by logging in as root, running emacs, running gcc, and running an xterm inside X-Windows.
  2. Setup your computer for networking. This means the following:
    • If you plan to do networking through a telephone line, setup your modem with wvdial, kppp, or whatever you plan to use.
    • If you plan to do networking through ethernet: for broadband, LAN, or what have you, setup your network card to connect to the Internet.
    Verify this part by firing up a browser, and visiting Vikram's Fine webpage
  3. Download the kernel sources for the version that you plan. I would suggest the latest kernel version, unless you have your reasons. You might need them, you might not. Verify this part by running 'make menuconfig' in the kernel directory, and building a kernel.
  4. Still with me? Great. Now is when the fun begins. Now attach the USB camera, and find out if it is supported. If it is supported, then you are done. A supported camera usually gives happy messages in /var/log/messages and /var/log/syslog about how it was detected, and how some driver is very happy with it, and will provide support for it. If this has happened, you are good. Go on to the next step. Chances are that this doesn't happen right off. In this case, you have to use your Internet connection to download the appropriate kernel modules which will support your camera. Remember I told you that you need to make sure that your camera is supported and there is a driver available with source. Now is the time to go get that driver, untar unzip it, and follow its instructions. Every driver has its own set of instructions, so I cannot possibly cover them all here. If you have some trouble, look through the README files, and ask questions on the developer mailing lists. When asking questions, be polite, since the developers don't owe you anything. Provide as much documentation as possible, which includes linux kernel version number, gcc version number, device ID, webcam driver version number. Verify this setup by running "camstream", and looking at your oh-so-wonderful mugshot in the screen.
  5. Now install apache on your machine, or some webserver which can serve static files. Tiny http servers are great, if you have a dinky computer. We will only be serving static content, so if you don't need it for other things, you can turn off fancy features like mod-php, mod-perl, and CGI. Don't need it. Verify this setup by changing the main page of your website to your sweetheart's name, and asking the sweetheart in question to access it remotely. In case your sweetheart doesn't have opposable thumbs: a turtle, a cow, a rabbit, go to some other computer on the Internet: a cybercafe, a University, a Friend's house, and verify that the page is visible on the open Internet.
  6. Install the fine program called motion. It is available at Motion's fine website but you might be able to get it from your Linux distributor's CD, website, or other places. If required, download sources, compile, and install. Verify this setup by running 'motion' on the commandline as root. Some messages should flash by, and you should see longer messages when you move in front of the camera.
  7. Now use my motion.conf file. This goes in /etc/motion/, but look through your motion setup to verify that the location of the file is correct. This makes motion take a single picture every 5 seconds, and put it in a directory where your webserver should be able to serve it on the Internet. 'motion' should be run as root, either as a daemon '-d' or you can pipe the output to /dev/null and run it in the background. Verify this setup by running motion, and using another computer to see the static image in a browser by giving the right path. Note: If you want to reduce the requirements on your CPU, you could make it take pictures less often, or you could go through the motion manual page to find out how to take pictures as png files and not jpg files.
  8. Optional If you do this setup, motion will write a jpeg file to your disk every five seconds. On old disks, this kind of hammering can push them over the edge. Also, you probably want to avoid this disk traffic. One trick is to make a ramdisk, and ask motion to write the picture on the ramdisk. The pictures I get from motion are around 19k, so a ramdisk of 1M should suffice. Do the following steps, all as root:
    # insmod rd   # <- In case you need to put the module in the kernel
    # dd if=/dev/zero of=/dev/ram0 bs=1M count=1  # <- Make the ramdisk of 1M
    # mkfs.ext2 /dev/ram0   # <- Make an ext2 filesystem on it
    # mount /dev/ram0 /var/www/YOUR/DIRECTORY # <- attach to filesystem
    
    Now when you run motion, it will write only to the RAM, thinking that it is a disk. This will make the write quicker, and will save your disk from too much traffic.
  9. Web page: Since we don't want to make any claims on the clients, it would be best if they were just plain browser boxes. Download my web-page framework, and modify just the basic stuff to reflect your settings. What I really like about this setup is that the client needs only a javascript enabled browser, the page doesn't reload everytime: only the image. And as a bonus, the client can set his refresh frequency, in case their connection is too slow, too fast... Verify this setup by asking your friends to look through the website, and by waving at the camera. You could also mail me about your webcam, and I'll verify that I can see you. :)

Credits

This work builds on the work of a huge community of happy hackers. I just put this page together. The real work was done by all these people:


This page was made by a noisy rabbit. You can reach me at "vikram-web at mayin dot org". This page was last updated at: Thu Oct 13 09:41:11 PDT 2005