Deconstructing the Veo Observer Net Camera
I still want my daughter to appear on a network camera and I’m not giving up that easily (see Big Brother watching over little sister). The D-Link DCS-1000W has been replaced by a Veo Observer Wireless Network Camera. The camera quality is a lot better, but the software works on Windows only
The Veo Observer camera is controlled from within your browser using an Active-X control. No Unix solution. No Mac solution. Only one person at a time can access the camera. Those are some serious drawbacks and I believe that those limitations are “artificially manufactured” into the camera.
I need a solution that sits on a Unix system and grabs a frame at fixed time intervals. My software will then check whether it’s worth keeping the frame. The D-Link did that just fine and I’m determined to make that work with the Veo Observer as well.
Step 1 was to contact Veo’s manufacturers via a number of different channels. No matter where I sent my emails to, they were left unanswered. After trying to get some sort of contact for three times, I decided that this was not the correct route to solve my problem. Shame on Veo for not even responding with a simple “Sorry - we are too busy …”.
Step 2 was to download the camera SDK from the Veo Observer SDK page. This SDK (again) is only available for Windows. I used it to create a minimal C-program that would connect to the camera, setup 640×480 resolution, grab a frame, save it to a JPEG file and exit. As there was only one camera on the network, I decided to hard-code IP address, port, username and password in the program (you have got to change the defines at the top of the code). If you’re planning to use the SDK, be prepared that there are some serious differences between the documentation and the way that the SDK actually works (somebody at Veo may want to clean this up …)
Here is the code using the Veo Observer Windows C++ SDK. After compiling the software and linking it with the SDK-libraries/DLLs, you end up with a program that sends a snapshot at 640×480 to a filename specified on the program command line.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>#include ”xrlknc.h”
#define VEO_NETNAME ”192.168.1.1″
#define VEO_PORT 1600
#define VEO_USER ”username”
#define VEO_PASSWORD ”password”int main(int argc, char *argv[])
{
PNET_CAM veo;
PCAM_FORMAT fList;
ULONG fCount;
CAM_STREAM_DEF fCurrent;
CAMERR err;
CAM_SNAPSHOT_PARMS snapParams;
CAM_STREAMING_PARMS streamParms;if(argc != 2) {
printf(”Usage: %s <snapshot-filename>\n”,argv[0]);
exit(1);
}err = CamLogon(VEO_NETNAME, VEO_PORT, VEO_USER, VEO_PASSWORD, GetDesktopWindow(), WM_APP, &veo);
if(err != CAMERR_OKAY) {
printf(”Unable to logon to camera - error code %d\n”,err);
exit(1);
}fCurrent.Format=2;
fCurrent.TimePerFrame=1000000;
err = CamSetStreamDef(veo,&fCurrent);
if(err != CAMERR_OKAY) {
printf(”Unable to set stream def - error code %d\n”,err);
}streamParms.VideoRect.top=0;
streamParms.VideoRect.left=0;
streamParms.VideoRect.right=640;
streamParms.VideoRect.bottom=480;
streamParms.Flags=0;
streamParms.StreamId=fCurrent.StreamId;
err=CamStart(veo, &streamParms);
if(err != CAMERR_OKAY) {
printf(”Unable to start streaming - error code %d\n”,err);
}snapParams.pBufferDef=NULL;
snapParams.FileName=argv[1];
snapParams.Format=CAM_SNAPSHOT_FORMAT_JPEG;
err = CamSnapshot(veo,&snapParams);
if(err != CAMERR_OKAY) {
printf(”Unable to take snapshot - error code %d\n”,err);
}CamStop(veo);
CamLogoff(veo);
return 0;
}
Nice - now I have a similar situation as before, but I’m hating the fact that the frames are grabbed from the Windows system and are transported to the Unix server via Samba. I need a Unix-only solution.
Step 3 was to switch on tcpdump (http://www.tcpdump.org/) and analyze the network traffic between the Active-X Control and the Veo Observer Camera. After looking at tons of packet traces, I created a perl-module that allowed me to communicate with the camera: And this works on Windows, Unix and the Mac.
A typical mini-application to connect to the camera would look like this below. This connects to the camera (using the default username/password), sets light and brightness levels, selects 640×480 resolution and grabs 20 frames from the camera:
use strict;
use Veo;my $veo=Veo->new(host => ‘192.168.1.1′, port => 1600);
$veo->login();
my($name,$loc)=$veo->info();
print “Name: $name\nLocation: $loc\n”;
print “Light: “,$veo->light(),”\n”;
$veo->light(Veo::VEO_LIGHT_NORMAL);
print “Light: “,$veo->light(),”\n”;
print “Brightness: “,$veo->brightness(),”\n”;
$veo->brightness(Veo::VEO_BRIGHT_NORMAL);
print “Brightness: “,$veo->brightness(),”\n”;
$veo->selectStream(Veo::VEO_STREAM_640X480,5);
$veo->stream(\&cb);
$veo->reset();my($images)=0;
sub cb {
my($data)=@_;
print STDERR qq{stream callback with },length($data),qq{ bytes of data\n};
open(OUT,”>”.sprintf(”veo%02d.out”,$images++));
binmode(OUT);
print OUT $data;
close(OUT);
return $images>=20?0:1;
}
Please keep in mind that this was all done without any information from Veo: All I did, was decoding the packet stream between the Active-X control and the camera.
The last hurdle in this puzzle is the image format that the camera dumps. What arrives in the callback is not in a standard format. Veo (with it’s Xirlink history) decided to encode the frames in a (proprietary) format called XJPG and I have not been able to find information about the make-up of XJPG files.
All I can tell is that those are YUV encoded frames that arrive from the camera; it’s not a differential format with key-frames, because the size of the data for each frame is very similar.
I decoded an entirely black frame with this:
0000000 0000 0000 1f03 73c6 ff00 ffff e3ff e001
0000010 8002 baf0 a228 288a 8aa2 a228 288a 8aa2
0000020 a228 288a 8aa2 a228 288a 8aa2 a228 288a
0000030 8aa2 a228 288a 8aa2 a228 288a 8aa2 a228
0000040 288a 8aa2 a228 288a 8aa2 a228 288a 8aa2
0000050 a228 288a 8aa2 a228 288a 8aa2 a228 288a
…
0001bf0 8aa2 a228 288a 8aa2 a228 288a 8aa2 a228
0001c00 288a 8aa2 a228 288a 8aa2 a228 288a 8aa2
0001c10 a228 288a 8aa2 a228 288a 8aa2 a228 288a
0001c20 8aa2 a228 288a 8aa2 a228 288a 8aa2 a228
0001c30 288a bfa2 d9ff
The “d9 ff” at the end looks a lot like a JPEG marker, but this is as much JPEG as I can see in the dump.
An entirely white frame (or close to white) looks a lot different:
0000000 0000 0000 091f ee47 ff00 ffff e3ff e001
0000010 8002 ddf4 98a1 4e1e 543b a3ea 3a1d 3474
0000020 ada7 9c02 6354 fd38 c129 5f01 6a4f 294a
0000030 42c1 3080 2a3f 4071 033a 71f9 1445 0ebc
0000040 184d b6e7 a04f 8aa2 0770 38d3 29fd f74a
0000050 ebef 1445 7360 4e81 c00b 0638 298a 0cc0
…
0003990 9ce9 ce51 513b 2145 40ce 1439 e799 e49c
00039a0 4551 f721 6734 1f03 8aca 0929 e93d 0032
00039b0 62e0 6294 9a92 3d39 fa08 3152 e23f 2829
00039c0 d234 324e 2946 b2a5 0639 4c8a 74d2 53fa
00039d0 fc49 69a9 4633 b47e ceab 8a73 5a5a d9ff
So, if the two dumps above look familiar to anybody (especially the 28a sequences in the black dump) or if you happen to know about the XJPG format, I’d be happy to hear from you using: tobias -at- kahunaburger.com
Otherwise, expect to hear back from me in while when I had the time to dig deeper into the Veo frames and find out how to decode the data.
Update 2/22/2004: Please take a look at the updated entry at Binary for Veo Observer Snapshot tool.
Update 8/12/2004: Finally I have a module that allows capturing the images from the Veo Observer Network Camera on any platform. See this entry.
Dispatch _DXNC600NetCam;
GUID = {DAA0CF8F-3BB4-4BC9-A111-553761FBD982};
function SetResolution(out Width: I4; out Height: I4); stdcall;
function SetBrightness(out Quntity: I2); stdcall;
function StopPreview; stdcall;
function Snapshot(out DestPath: BSTR; out PicFormat: I2); stdcall;
function StopCapture; stdcall;
function ZoomIn; stdcall;
function ZoomOut; stdcall;
function Logout; stdcall;
function StartCapture(out sFileName: BSTR; out iSizeLimit: I4; out bXJPG: Bool; out bAudioEnable: Bool); stdcall;
function FileDialog(out bSAVE: Bool; out DefaultPath: BSTR; out FileType: BSTR): BSTR; stdcall;
function GetErrMsgStr(out ErrMsgCode: I2): BSTR; stdcall;
function IsAlive: Bool; stdcall;
function GetShownFrameRate: I2; stdcall;
function GetConnectStatus: I2; stdcall;
function Login(out Cam
function PanTilt(out Direction: I2; out IsFull: Bool): I2; stdcall;
function CallVeoNetStudio(out EXEC: Bool): Bool; stdcall;
function FileCopy(out FileSrc: BSTR; out FileDest: BSTR; out OverWrite: Bool): Bool; stdcall;
function FileDelete(out FileName: BSTR): Bool; stdcall;
function FileExist(out FileName: BSTR): Bool; stdcall;
function SetCameraInfo(out CameraName: BSTR; out CameraLocation: BSTR): I2; stdcall;
function GetCameraInfo: I2; stdcall;
function GetCameraInfoName: BSTR; stdcall;
function GetCameraInfoLocation: BSTR; stdcall;
function SetUserAdd(out Username: BSTR; out UserPassword: BSTR; out UserLevel: I2): I2; stdcall;
function SetUserDelete(out Username: BSTR): I2; stdcall;
function GetUserList: I2; stdcall;
function GetMailEnable: Bool; stdcall;
function GetMailServer
function GetMailTo: BSTR; stdcall;
function GetMailFrom: BSTR; stdcall;
function GetMailSubject: BSTR; stdcall;
function GetMailMessage: BSTR; stdcall;
function GetMailResetInterval: I2; stdcall;
function GetMailAttachImage: Bool; stdcall;
function SetMaxFrameRate(out FrameRate: I2): I2; stdcall;
function GetMaxFrameRate: I2; stdcall;
function SetStreamingSize(out StreamingSize: I2): I2; stdcall;
function GetStreamingSize: I2; stdcall;
function GetQualityBacklight: I2; stdcall;
function SetQualityBacklight(out BacklightLevel: I2): I2; stdcall;
function GetUserListNext: BSTR; stdcall;
function StartPantilt(out Direction: I2): I2; stdcall;
function StopPantilt: I2; stdcall;
function GetBrightness: I2; stdcall;
function CallMediaPlayer(out MediaFIleName: BSTR; out EXEC: Bool): Bool; stdcall;
function MsgBox(out Msg: BSTR; out Title: BSTR; out Type: I2): I2; stdcall;
function PanTiltStatus: I2; stdcall;
function IsVeoCodecExist: Bool; stdcall;
function GetVersion: BSTR; stdcall;
function StartPreview(out LEFT: I2; out TOP: I2; out RIGHT: I2; out BOTTOM: I2; out bStreamAudio: Bool; out bDisableOverlay: Bool; out bTCP: Bool; out DELAY: I2): I2; stdcall;
function SetStatusLight(out Enable: Bool): I2; stdcall;
function GetStatusLight: Bool; stdcall;
function ResetCamera: I2; stdcall;
function SetMailInfo(out MailEnable: Bool; out MailServerIPAddress: BSTR; out UserID: BSTR; out UserPassword: BSTR; out MailTo: BSTR; out MailFrom: BSTR; out MailSubject: BSTR; out MailMessage: BSTR; out MailResetInterval: I2; out MailAttachImage: Bool): I2; stdcall;
function GetMailInfo: I2; stdcall;
function GetMailServerUserID: BSTR; stdcall;
function AboutBox; stdcall;
//Event interface for XNC600NetCam Control
//Help File: C:\WINDOWS\Downloaded Program Files\XNC600NetCam.hlp
Dispatch _DXNC600NetCamEvents;
GUID = {A821B544-ADD8-4C4A-8B5A-0788ED20EA03};
//XNC600NetCam Control
//Help File: C:\WINDOWS\Downloaded Program Files\XNC600NetCam.hlp
CoClass XNC600NetCam;
GUID = {0957C19A-D854-482A-A4F9-18856C723D7D};
Great Work on the deconstruction. I have the same camera, and I was hoping I could find a program that would capture a photo and store it on a drive as well, but I think that programing is out of my league.
I have been messing around in VB6, but couldn’t make sense of the SDK kit. It just crashed everytime I try and run the VEO example… suprise. Just thought I would drop a note and throw you a thumbs up.
Maybe this can help you ;o)
http://coecs.ou.edu/Mark.A.Branson/CameraInterface.idl
http://coecs.ou.edu/Mark.A.Branson/camera.pdf
http://coecs.ou.edu/Mark.A.Branson/CameraImpl.cpp.pdf
http://coecs.ou.edu/Mark.A.Branson/CameraImpl.cpp.pdf
http://coecs.ou.edu/Mark.A.Branson/CameraImpl.h.pdf
http://coecs.ou.edu/Mark.A.Branson/client.pdf
http://coecs.ou.edu/Mark.A.Branson/licker.cpp.pdf
http://coecs.ou.edu/Mark.A.Branson/licker.h.pdf
http://coecs.ou.edu/Mark.A.Branson/finalreport.pdf
Hi, I’m the Australian distributor for Veo products and have also had little luck over the last couple of days getting decent tech support from Veo in Taiwan. I have a customer wanting to communicate with a Veo Observer from a unix box. So far I have had to tell him it is not possible but it looks like some of you guys may be able to help. I know nothing about programming but he seems to. Have you made any further progress streaming video to the unix system? Also, Veo’s ftp doesn’t seem to be working and I couldn’t download the SDK or the Java Applet files. Can anyone send me a copy of the files?
Cheers,
Rob.
Hi there! I have had some problems viewing my Veo Observer through my firewall, and I was finally successful, thanks to my new Netgear FR114P router. The router includes logging of inbound rules, so I was able to eventually determine that, depsite all documentation to the contrary…
*** My camera uses PORT 10408 for video, NOT PORT 1600! ***
Has anyone else noticed this? Once I made the corrections in my router setup, it worked fine! I wonder if I have an old version of the camera, or if it’s just not very well documented.
Just thought I’d share this in case it’s not just my cam!
Paul
Did you happen to change your HTTP port for the camera to 10408? From the manual - Note: Increasing the camera’s web page port number automatically increases it’s streaming port by
the same amount. For example, setting the web page port to 81 sets the streaming port to 1601.
You must forward both ports to the camera’s LAN IP address to enable remote access.
Having similar issues…
And Bingo! Set a static IP, opened port 82 AND opened port 1602 and thar she blows…
feedercam.geoffreypierce.com
login user
pwd user
It’s a view of a birdfeeder on my sill, soon to be a spy cam on some nesting mourning doves and their hatchlings. Finally! I have a spy cam on naked chicks!
You’re right- that should have occured to me. I had changed my HTTP port to 8888, so 1600 + (8888 - 80) = 10408. My bad. At least the mystery is solved. Veo would have been better served to provide the ability to override the video port manually, though!
p.s. I had emailed my issue to Veo, and the customer support person was unable to help me!
Paul
Hi, I’m an absolute IT-idiot, so please excuse my dumb questions
Could anyone tell me a simple way to force my Observer to place an image in a file? I am not able to do this reverse engineering and I am not able even to compile code :,-((((
Any help?
Greetings from the other side of the world
Puki
P.S. Geoffrey: lovely cam, which city is seen?
Hi
i just bought veo observer(wifi version)..anyone can know how to see in single web page to view ?
i saw in one guy web site(http://www.gamblin.net:82/LGI_en.htm) user :butthead
password:butthead
that page can be resize too…
anyone can tell me what version of firmware of his camera…
thank for anyone
helux
Anyone figured out how to disable the authentication process? Going through our proxy server is my only option…I can’t open 2 ports 1520 apart on the Firewall. I wish they had an authentication that went through a single port.
Been looking fo an all unix solution. Have you considered releasing the veo perl mod? Just thinking about looking at all the tcp/ip traffic between the cam and the pc makes my skin curl!
PS. Neat kid! where do you find the time to program?
i wanna be able to by pass the authentication of veo and view the live stream from the camera directly, can this be done?
i want to by pass the authentication of veo and view the live stream from the camera directly, can this be done?
Has anyone been able to get the Veo Observer working with Pocket PC (2003)? Of course I tried to look for a ready to run PPC client. But not ruling out a little bit of porting/programming if source code is available.
The SDK from Veo website is just non-sense. Just a list of mysterious java class or C++ functions, w/o any documentation.
thoellri,
In your code u have included this file
#include “xrlknc.h”
where did u get this file from ? could u please email me the file “xrlknc.h”
In order to get past the language screen, I looked at the code of the default web page and found the english link to LGI_en.htm Here is the code
case “us”:
WelcomeText.innerText=”Welcome to the Veo Observer Web Client.”;
HelpText.innerText=”Help?”;
DLErrorText.innerText=”VeoNetCam ActiveX Control v2.067 download failed!!”;
HlpPage=HlpPage + “en.htm”;
For french is would be;
case “fr”:
WelcomeText.innerText=”Bienvenue dans le Veo Observer Web Client.”;
HelpText.innerText=”Aide?”;
DLErrorText.innerText=”Echec de téléchargement du ContrôleActiveX VeoNetCam v2.067 !!”;
HlpPage=HlpPage + “fr.htm”;
break;
So my link is http://www.gamblin.net:82/LGI_en.htm
82 is the port I am using since my web server is on port 80.
paul
ey, i tried uisng your code on deconstructing the Veo Observer Net Camera but I’m having problems with it..
I opened a new Managed C++ Empty Project and tried your code but I’m getting errors.I went to Tools->Options and then included all DLL files(Exe files), Include files and Lib files but still get this error:
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(34): error C2871: ‘Data’ : a namespace with this name does not exist
c:\Documents and
Settings\psalgado\Desktop\NetCam\NetCam.cpp(34): error C2039: ‘Data’ : is not a member of ‘System’
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(35): error C2039: ‘Data’ : is not a member of ‘System’
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(35): error C2871: ‘SqlClient’ : a namespace with this name does not exist
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(36): error C2039: ‘Xml’ : is not a member of ‘System’
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(36): error C2871: ‘Xml’ : a namespace with this name does not exist
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(69): error C2228: left of ‘.Format’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(70): error C2228: left of ‘.TimePerFrame’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(72): error C2664: ‘CamSetStreamDef’ : cannot convert parameter 2 from ‘PCAM_STREAM_DEF * ‘ to ‘PCAM_STREAM_DEF’
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(78): error C2228: left of ‘.top’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(78): error C2228: left of ‘.VideoRect’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(79): error C2228: left of ‘.left’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(79): error C2228: left of ‘.VideoRect’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(80): error C2228: left of ‘.right’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(80): error C2228: left of ‘.VideoRect’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(81): error C2228: left of ‘.bottom’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(81): error C2228: left of ‘.VideoRect’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(82): error C2228: left of ‘.Flags’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(83): error C2228: left of ‘.StreamId’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(83): error C2228: left of ‘.StreamId’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(85): error C2664: ‘CamStart’ : cannot convert parameter 2 from ‘PCAM_STREAMING_PARMS * ‘ to ‘PCAM_STREAMING_PARMS’
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(92): error C2228: left of ‘.pBufferDef’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(93): error C2228: left of ‘.FileName’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(94): error C2228: left of ‘.Format’ must have class/struct/union type
c:\Documents and Settings\psalgado\Desktop\NetCam\NetCam.cpp(99): error C2664: ‘CamSnapshot’ : cannot convert parameter 2 from ‘PCAM_SNAPSHOT_PARMS * ‘ to ‘PCAM_SNAPSHOT_PARMS’
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
can you help me how to resolve this one? the error points to xrlknc.h which i have typed in at the top as #include “xrlknc.h” Thanks!
When I open the veonetcam in the internet explorer the face show the VeoNetCam ActiveX Control v2.065 download failed please help me to solve the problem.
Hi,
Have Veo network cam running through wireless modem router. Having problem picking up audio when broadcasting over the internet.
Uplink speed is 256k standard Broadband ADSL UK connection
Also is it possible to switch from video/audio mode to audio mode only.
When I open the veonetcam in the internet explorer the face show the VeoNetCam ActiveX Control v2.065 download failed please help me to solve the problem
I found a way to solve the problem of showing “The VeoNetCam ActiveX Control v2.065 download failed!!!” in IE, download and run “ActiveX Cleanup Utility for Observer”, http://www.veo.com/Observer/firmware.asp
Has anyone tried loading the Firmware for the VEO XT model on to the older model to see if any of the new features can be realized on the old model?
I wonder if the only difference is the firmware?
Hea, Great Work! What a piece of shit dll/lib.
I couldn’t get past the CANNOT_RESOLVE bullshit. Im going to put some code together and upload it her when I’m done. Its a simple c# webservice. Although you will still need to run it under win32, you will be able to call it from any system.
Thanks again for the c++ code sample!
Best regards
JRadical
Hea man, YOU ARE GREAT. If those idiots @ veo
just contained your code in their SDK it would be great. The only thing I would say is instead of the people at veo correcting their documentation, I think they should just kill themselves.
Have a great day!
Best regards
JRadical
ps:Stay tuned I’m going to code that WSDL right now…
Hi, I wan’t to pay back the effort for the c++ code above. I’m not sure if anyone is watching these threads
This is the C++ Managed WS .CPP File
//////////////////////////////////////////////////
#include “stdafx.h”
#include
#include
#include
#include
#include “veowebClass.h”
#include “Global.asax.h”
#include “xrlknc.h”
#define VEO_NETNAME “192.168.1.102″
#define VEO_PORT 1602
#define VEO_USER “admin”
#define VEO_PASSWORD “password”
namespace veoweb
{
String __gc* veowebClass::HelloWorld()
{
return S”Hello World!”;
}
veoBlob __gc* veowebClass::getImage()
{
// veowebClass::xsd__base64Binary *a;
veoBlob *c=new veoBlob();
String* str = S”String to be converted to a byte array”;
Byte barr[] = new Byte[str->Length];
for(int i=0; iLength; i++)
barr[i] = static_cast(str->ToCharArray()[i]);
c->gg=barr;
return c;
}
veoBlob __gc* veowebClass::getVeoImage()
{ PNET_CAM veo;
PCAM_FORMAT fList;
ULONG fCount;
CAM_STREAM_DEF fCurrent;
CAMERR err;
CAM_SNAPSHOT_PARMS snapParams;
CAM_STREAMING_PARMS streamParms;
// if(argc != 2) {
// printf(”Usage: %s \n”,argv[0]);
// exit(1);
// }
err = CamLogon(VEO_NETNAME, VEO_PORT, VEO_USER, VEO_PASSWORD, GetDesktopWindow(), WM_APP, &veo);
if(err != CAMERR_OKAY) {
;// printf(”Unable to logon to camera - error code %d\n”,err);
// exit(1);
}
fCurrent.Format=2;
fCurrent.TimePerFrame=1000000;
err = CamSetStreamDef(veo,&fCurrent);
if(err != CAMERR_OKAY) {
;// printf(”Unable to set stream def - error code %d\n”,err);
}
streamParms.VideoRect.top=0;
streamParms.VideoRect.left=0;
streamParms.VideoRect.right=640;
streamParms.VideoRect.bottom=480;
streamParms.Flags=0;
streamParms.StreamId=fCurrent.StreamId;
err=CamStart(veo, &streamParms);
if(err != CAMERR_OKAY) {
;// printf(”Unable to start streaming - error code %d\n”,err);
}
snapParams.pBufferDef=NULL;
snapParams.FileName=”\out.jpg”;
snapParams.Format=CAM_SNAPSHOT_FORMAT_JPEG;
err = CamSnapshot(veo,&snapParams);
if(err != CAMERR_OKAY) {
System::Console::WriteLine(”ErrorReadingPicture”);
;// printf(”Unable to take snapshot - error code %d\n”,err);
}
CamStop(veo);
CamLogoff(veo);
String *fileName=”\out.jpg”;
BinaryReader* binReader =
new BinaryReader(File::Open(fileName, FileMode::Open));
veoBlob *c=new veoBlob();
//String* str = S”GotVeoImage”;
// Byte barr[] = new Byte[str->Length];
// for(int i=0; iLength; i++)
// barr[i] = static_cast(str->ToCharArray()[i]);
//c->gg=barr;
try
{
//File *F=File::Open(fileName, FileMode::Open);
// If the file is not empty,
// read the application settings.
//binReader->ReadBytes(binReader->)
binReader->BaseStream->Position = 0;
// Read and verify the data.
c->gg= binReader->ReadBytes((int)binReader->BaseStream->Length);
if(binReader->PeekChar() != -1)
{
// aspectRatio = binReader->ReadSingle();
// lookupDir = binReader->ReadString();
// autoSaveTime = binReader->ReadInt32();
// showStatusBar = binReader->ReadBoolean();
//return;
}
}
// If the end of the stream is reached before reading
// the four data values, ignore the error and use the
// default settings for the remaining values.
catch(EndOfStreamException* e)
{
Console::WriteLine(S”{0} caught and ignored. ”
S”Using default values.”, e->GetType()->Name);
}
__finally
{
binReader->Close();
}
return c;
}
};
////////////////////////////////////////////////
This is the .hpp File
// veowebClass.h
#using
#using
#using
#pragma once
using namespace System;
using namespace System::Web;
using namespace System::Web::Services;
using namespace System::IO;
using namespace System::Xml;
using namespace System::Xml::Serialization;
using namespace System::Xml::Schema;
namespace veoweb
{
/// WARNING: If you change the name of this class, you will need to change the
/// ‘Resource File Name’ property for the managed resource compiler tool
/// associated with all .resx files this class depends on. Otherwise,
/// the designers will not be able to interact properly with localized
/// resources associated with this form.
public __gc class veoBlob
{
public:
[SoapAttributeAttribute(DataType=S"base64Binary")]
Byte gg[];
};
[SoapInclude(__typeof(veoBlob))]
public __gc
class veowebClass : public System::Web::Services::WebService
{
public:
veowebClass()
{
InitializeComponent();
}
protected:
void Dispose(Boolean disposing)
{
if (disposing && components)
{
components->Dispose();
}
__super::Dispose(disposing);
}
private:
///
/// Required designer variable.
///
System::ComponentModel::Container * components;
///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///
void InitializeComponent()
{
}
// WEB SERVICE EXAMPLE
// The HelloWorld() example service returns the string “Hello, World!”.
// To test this web service, ensure that the .asmx file in the deployment path is
// set as your Debug HTTP URL, in project properties.
// and press F5.
public:
[System::Web::Services::WebMethod]
String __gc* HelloWorld();
[System::Web::Services::WebMethod]
veoBlob __gc* getImage();
// TODO: Add the methods of your Web Service here
[System::Web::Services::WebMethod]
veoBlob __gc* getVeoImage();
};
}
///////////////////////////////////////
Clearly it needs some MAJOR Cleanup. It’s just a demonstration of how to Send a Captured VEO Image as a Webservice.
Some needed improvements are:
1) Stream the Image .vs. Writing it to a file
2) More Control Over The Camera
3) Compress the .jpg
Anyway, this thing works like a charm for a wireless pocketpc device.
Have a great day!
JRadical
Qui pourais m’aider ici s’il vous plait (en francais si possible)
j’ai ca qui apparait quand je veux configurer ma webcam
For french is would be;
case “fr”:
WelcomeText.innerText=”Bienvenue dans le Veo Observer Web Client.”;
HelpText.innerText=”Aide?”;
DLErrorText.innerText=”Echec de téléchargement du ContrôleActiveX VeoNetCam v2.067 !!”;
PLease help . I bought ObserverXT on ebay and cant detect it on the network. the little window shows 015 , but dhcp list isn’t showing anything with that IP . So, the question is how do i reset the cam without the utility provided by VEO . I want to reset all settings to factory defaults. Please help.
Hi,
I’m not very good at programming, so I’m still having a little trouble figuring this whole thing out… In the meantime, I was wondering if any of you guys has tried to get the VEO Observer just to send video to a webpage… I’m trying to set up a remote lab app, and want to embed the video stream into my app without the authentication page. Can this be done at all? Or do I need another cam?
Thanks in advance
hi again… could someone send me the e-mail of VEO support? so far I’ve been trying to send a support form from their web page but so far have gotten nothing but error while sending…
thanks
MY CAM Doesnt work. any idea?
MY CAM Doesnt work. any idea?
Look here for a single web solution :
http://www.JDevCom.de/jdcveo/index.php
JDevCom your solution is great. Is it opensource or closesource?
When I visit veo.com today it said “This site has exceeded the allotted bandwidth.” Don’t know whether they are running out of business or not.
It’s opensource !!!!
I was trying to do a hard reset on my veo but the ip on the side still remain the same no matter how long I hold the button. Any idea why? is it manufacturer fault?
JDevCom, Where can we download the source. I dont see a link on your site for a download for the opensource code?
http://www.jdevcom.de/download_center.php?file=veo
Hi, I have just found this forum after much trawling and wonder if anybody can help. I have just bought a veo wireless observer, but it does not seem to register on the serial port and the message ‘wireless camera not found’ pops up when I try to enter config utility. The power light is on and the networking light at the back is steady green (not flashing). Also, there is nothing on the IP address display. Do I have a dead unit or am I missing something obvious? Any help appreciated
Has anybody by any change tried uploading the XT firmware into a standard Veo Wireless Observer? I have a standard Veo Wireless Observer, and was wondering if the Veo Wireless Observer XT firmware would work on the normal one?
The cameras seem very much the same, and have the same specifications. The XT has however the more interesting software capabilities, allowing multiple Java connections, etc.
I’ve asked the question to Veo, and of course they say that it isn’t possible as they use different internals. I can imagine that they say this in the hope that we would buy a new XT instead…
Would it be really risky to try to upload the XT firmware into the older Wireless Observer? Did by any change somebody already try?
Is there any way to to have the Veo Observer Net Camera just spit out a JPG at its web address? something like: 192.168.1.3:1600/current.jpg
Hi,
I’m the owner of a veo observer wireless on ports 81 and 1601, that works prefect at home from any computer, but when I’m outside and I try to watch the cam, then the 81 is fine, but then the video is not working when trying to log in, and I am fowareding both ports to the cam.
Any ideas?
Strange that from the intranet works but from outside does not… at least the video…
I have just bought a veo wireless observer, but it does not seem to register on the serial port and the message ‘wireless camera not found’ pops up when I try to enter config utility. The power light is on and the networking light at the back is steady green (not flashing). Also, there is nothing on the IP address display. Do I have a dead unit or am I missing something obvious? Any help appreciated
Same problem here after failed firmware update.
Does someone know how to reset factory defaults or do hard reset? Please mail me: mzwetsloot@yahoo.com
Helo
Anyone can help me plys, i have veo observer one v70000E
and i cant connect white active webcam 7.0 programe the programe dont found the camera. directly whit internet explorer its ok.
Thankss
@ VHACTION
Thats not possible because the camera has not a jpg location, this webpage from Kahunaburger shows a way with pearl and stuff, but i dont understand that
I have also a Afreey ANC-800W with the possibility to reach the .jpg location (http://ip.port/cgi-bin/video.jpg)
Mike Zwetsloot
Helo and tanks for answor, excus mi can you expleyn mi exactly what is my problem plys, bicos i am not pro whit ip cameras.
excus for my english.
Hi
You seem to know alot about this camera. Mine has a problem, I think it needs to be reflashed, I get no website, no pics, etc. I can’t update the firmware via ethernet, but I took it apart and there is a header of 8 unconnected pins that I am hoping is a serial interface. Maybe I can reflash at this connection with a null modem cable. There is much more info out there on de-bricking $40 routers than these $100 camera’s, but if anyone has a clue you may be the guy. I am talking about flashing the firmware, so no funny comments about adding a flash cube haha.
Thanks
Hi i have just been given a Veo Wireless Observer, i can get the wireless part of it set up but just after the point where it says wireless ok i get an error no camera found. But the camera has now been set to 192.168.1.17 as per lcd read out i have tried different ports, its now set to port 82 and port 1602 and port forwarded in the 3com router as per instructions but i still cannot access camera. Also can anybody give me the pin outs for the rs232 cable used as i have made one up.
Thanks in advance
Any help thankfull
Hey wazza, did you manage to get the pin outs as i need them, or can you advise with the wiring you have used for you cable as i have bought 1 rsr232 cable and it does not connect to the PC, please can you help?
do you still have the setup utility for the wireless camera? I have lost mine
Hi m8, yes i do, email me at simon_smitt@ntlworld.com
sorry typo…its simon_smith@ntlworld.com
Hello…it seems that the VEO website is not online anymore…
I thought that I could find an update for the drivers etc etc, but now even the older one aren’t available anymore !!!
Anyone knows the new website name ( if any) ??
Ciao
Andrea
Hi, i loss my cd with software Evo Wireless camera, and de website is offline. ¿?¿?
I have same question like Andrea…
Anyone knows the new website name ( if any) ??
thanks and regards…
Does anyone have the applets for the java motion portion of the Veo Observer XT. I cannot get the motion Jpeg to display and I believe its because the camera has not downloaded the Applets to my PC. I have the Java runtime, VM, and the Java media framework installed that came with the original CD, but I still get no motion pictures diplayed. The still picture displays works fine.