Introduction
I got tired looking for an app to write a snap shot from my camera to disk; that was free, no ad ware and with no advertising on the image. I found a guy who wrapped the DirectX Library in C# - WHAT A CHAMP! Here's a link to his article. Anyway, he has a full library called DShowNET and I called into that, made a Windows service that always runs when my PC is on. I added a full FTP library that is extended from the work by Jaimon Mathew.
Overview
This package comes as a project and a DLL (DShowNET). It has the following files:
- WebCamService.cs
- FtpClient.cs
- Capture.cs
- WebCamInstaller.cs
Now, using the DShowNET library is a little tricky, and just to get a photo out of the web cam tool some 400 lines of code are required. I extended the Sample Grabber supplied with DShowNET and added the reset event so that the photo could be taken synchronously.
The worst problem was making it stable, but this has been running on my workstation now for 20+ days without a restart. The most important code for stability is in the CloseInterfaces
method - note the extensive try/catches - everything must be cleaned up, otherwise strange errors (including blue screens) will be observed.
The FTP library I extended, so I could use it as a full featured FTP client. I have added it to this project so I can upload files to the server.
Requirements
- DirectX 8.1
- .NET Framework
- Visual Studio .NET (if you plan to edit it of course)
- A Windows OS that supports Windows Services (2K,XP)
- Any DirectX supported Video in device (Tuner, Capture, Camera etc...)
- 5 Minutes of your time
Setup
The Installer component is used to install the service with the command:
C:\>installutil.exe D:\projects\webcam\webcamservice\bin\debug\webcamservice.exe
You will also need to edit the config file to reflect your needs:
<add key="path" value="D:\Projects\WebCamService\out\WebCam.jpg"/>
<add key="CaptureCycleSeconds" value="10"/>
<add key="KeepOldImageCount" value="20"/>
<add key="FtpServer" value="???"/>
<add key="FtpUserName" value="???"/>
<add key="FtpPassword" value="???"/>
path
is where you wish to upload the picture to.
CaptureCycleSeconds
is how long to wait before taking another photo (add in capture time to 11+ seconds)
KeepOldImageCount
is to hold the last n photos taken
The rest are pretty explanatory.
Now you cans start and stop the service with the following commands:
net start WebCamService
net stop WebCamService
The service will run in the background, and be started when your machine boots, NOT when you login.