On July 12th 2011 I received the IP Camera I’d purchased from DealExtreme — a cheap little Foscam FI8908w clone. This post documents various bits of information about the unit (just in case I need a reminder some day in the future regarding upgrading firmware, controlling/reading the device with wget and VLC, using the camera from an iPod/iPad, and accessing the internal boot loader via serial port).
Creatively the product is called “IP Wireless / Wired Camera” on the box, so I’ll just called it “IPcamera”. It uses a ¼” 300K pixel CMOS colour image sensor to capture single frames or generate a motion-JPEG video feed at various frame rates (up to 30 frames per second) and 320×240 or 640×480 resolution. Images and video are extracted by making an HTTP connection to the camera, and streamed back over either wired (IP over Ethernet) or wireless (IP over 802.11b/g) connectivity. Servo motors allow for remotely controllable pan and tilt.
The camera is surrounded by a ring of infra-red LEDs which light up when the environment is too dark, at which point you get a black-and-white feed from the CMOS image sensor (claimed range is 3~5m in infra-red mode). The IPcamera provides a web-based interface that works best with Internet Explorer (due to the use of ActiveX controls). However, there are other alternatives — direct video feed to programs like wget and vlc to retrieve images and video feeds from my FreeBSD machines, and “CamViewer” to view and control the IPcamera from iPhone, iPod and iPad2 devices. The ASF format video feeds also carry fairly poor quality audio from a tiny built-in microphone.
The supplied Windows-based software apparently allows you to get an email sent to a nominated address when motion is detected, but I haven’t bothered with that functionality. You can also remotely turn on and off a set of relay contacts available on the back of the camera unit.
Upgrading the firmware
There’s a convenient history of Foscam Fi8908w firmware releases online here. The unit I received had old firmware:
Device ID 000DC5D047F1 Device Firmware Version 18.104.22.168 Device Embeded Web UI Version 22.214.171.124
So first thing is to upgrade it. I grabbed http://anyhub.net/file/3vcm-foscam.zip which (at the time) purported to be a collection of firmware required to upgrade the camera. The upgrade software runs on Windows, and I was able to do the upgrades from an instance of Windows XP running under VirtualBox on my home FreeBSD server.
Running IPCamSetup.exe from 3vcm-foscam.zip installs “IP Camera Tool”. After restarting my WinXP virtual machine I launched this “IP Camera Tool”, which reported itself to be version 0.0.7.6, with “ActiveX control” version 0.0.0.36. I believe IP Camera Tool sends a broadcast Ethernet frame over local network interface(s) to trigger a response from any locally-attached IPcameras — it certainly quickly identified my camera’s IP address.
Actually upgrading the firmware involves a right-click on the IPcamera’s name inside IP Camera Tool, then selecting “Upgrade Firmware”. You need to upgrade in steps — jump to each successive firmware release (e.g. from 3vcm-foscam.zip ) one at a time, rather than jumping multiple releases in a single go. Also, at each step you must upgrade the system firmware first, let the unit reboot, then upgrade the webgui firmware and let the unit reboot again.
In the end my IPcamera is running:
Device ID 000DC5D047F1 Device Firmware Version 126.96.36.199 Device Embeded Web UI Version 188.8.131.52
(The “Device ID” is the IPcamera’s MAC address on the wired/Ethernet port.)
Double clicking on the IPcamera’s name inside the IP Camera Tool results in Internet Explorer being launched to access the camera’s web GUI (ensure you “allow” ActiveX controls to execute in the browser). From here you can begin to configure a range of IPcamera functionality or begin watching a live video feed.
There’s an annoying green LED on the front of the IPcamera that flashes to indicate network activity. I turned it off (see “network light” under Basic Networking in the GUI).
The IPcamera will quite happily run over 802.11b/g, but keep two things in mind:
- Disconnect the wired ethernet cable and reboot the IPcamera to enable 802.11 connectivity
- Ensure your home AP is broadcasting the same SSID you’ve configured into the IPcamera (via the web GUI). The IPcamera will not associate with an AP if the SSID is hidden, even if the IPcamera knows the correct SSID.
The IPcamera’ s GUI has a “Wireless LAN Settings->Scan ” function — you can use this to identify other WiFi nodes. Be sure to configure the correct SSID and any necessary passwords before trying to associate with your home network.
In November 2011 the best choice I found for monitoring the IPcamera’s video feed on an iPod, iPhone or iPad was “CamViewer for Foscam Webcams” by John McKerrell. This free app (there’s a paid upgrade available to provide audio too) allows remote control of pan&tilt, and selection of 320×240 or 640×480 resolution video feeds. I tried a number of other cam viewers in 2011 and they sucked.
Various video feed modes
You can watch video (and control the camera’s pan and tilt) with their ActiveX-based GUI interface under Internet Explorer, if you like doing things under Windows. I discovered from this website that you can just watch the video (or take snapshots) from other browsers with:
http://<ipcamera-address>/live.htm (to view live video feed)
http://<ipcamera-address>/snapshot.cgi (take a snapshot)
Or, you could utilise programs like VLC to grab and display (or transcode/stream) the IPcamera’s video feed. Assuming your IPcamera’s admin account has no password, the basic video/audio feed is obtained using a URL of the form:
Give this URL to VLC and you’ll quickly start getting the video feed. You may need to adjust down the default HTTP stream buffering in VLC (selecting VLC’s Advanced options and turning the buffering down to 100ms helped a lot in my case).
More parameters can be set in the URL: /videostream.cgi[?user=&pwd=&resolution=&rate=] /videostream.asf[?user=&pwd=&resolution=&rate=]
The parameters to retrieve video/audio feeds of differing resolution are:
resolution:8 (for 320*240), 32 (for 640*480) rate: 0-23 0:maximum 1:20 fps 3:15 fps 6:10 fps 11:5 fps 12:4 fps 13:3 fps 14:2 fps 15:1 fps 17:1 fp/2s 19:1 fp/3s 21:1 fp/4s 23:1 fp/5s
So, for example, the following URL
provides video at 640×480 @ 5 fps rather than the default FPS.
Querying and setting camera configuration parameters
You can also query the IPcamera for current system status using e.g. wget
[gja@gjadesktop]/home/gja(107)% wget -qO- "http://<ipcamera-address>/get_status.cgi" var id='000DC5D047F1'; var sys_ver='184.108.40.206'; var app_ver='220.127.116.11'; var alias=''; var now=1341318059; var tz=-36000; var alarm_status=0; var ddns_status=0; var ddns_host=''; var oray_type=0; var upnp_status=0; var p2p_status=0; var p2p_local_port=22648; [gja@gjadesktop]/home/gja(108)%
Reading other more detailed config parameters require the IPcamera’s username (usually admin) and password.
For example, parameters relating to the camera’s video modes themselves:
[gja@gjadesktop]/home/gja(114)% wget -qO- "http://<user>:<password>@<ipcamera-address>/get_camera_params.cgi" var resolution=8; var brightness=67; var contrast=4; var mode=0; var flip=0; var fps=0; [gja@gjadesktop]/home/gja(115)%
Setting these parameters can also be achieved using wget or similar tool
email@example.com :wget -qO- "http://<user>:<password>@<ipcamera-address>/camera_control.cgi?param=1&value=144" ok. firstname.lastname@example.org :wget -qO- "http://<user>:<password>@<ipcamera-address>/get_camera_params.cgi" var resolution=8; var brightness=144; var contrast=4; var mode=0; var flip=0; var fps=0; email@example.com :
wget -qO- "http://<user>:<password>@<ipcamera-address>/set_datetime.cgi?tz=-3600&ntp_enable=1&ntp_svr=0.us.pool.ntp.org"
wget -qO- "http://<user>:<password>@<ipcamera-address>/set_network.cgi?ip=192.168.1.66&mask=255.255.255.0&gateway=192.168.1.254&dns=192.168.1.254&port=80"