Airlink101 SkyIPCam 747W - Working

Post here to indicate any hardware you have used and which is known to work with ZoneMinder. Not for questions.
User avatar
Setarcos
Posts: 44
Joined: Thu Jan 25, 2007 4:51 pm
Location: San Jose, CA

Airlink101 SkyIPCam 747W - Working

Post by Setarcos »

Hi Folks,

I picked a Airlink101 SkyIPCam 747W over the weekend (on sale at Frys for $129) and already have it working with ZM to a limited extent.

The device requires authentication, so you need to provide the Remote Host Name parameter with <username>:<password>@mycamip

Remote Host Path can be either /cgi/jpg/image.cgi for JPEG stills, or /cgi/mjpg/mjpeg.cgi for MJPEG (I haven't gotten MJPEG working yet).

Image resolution set for 640x480, but this appears to be adjustable.

I haven't had a crack at the PTZ control stuff, or other camera features (motion detection, events, audio I/O, GPIO control) yet, but so far I am impressed.
User avatar
Setarcos
Posts: 44
Joined: Thu Jan 25, 2007 4:51 pm
Location: San Jose, CA

Post by Setarcos »

Just started deciphering the control commands:

Up
http://mycamip/admin/ptctl.cgi?move=up

Down
http://mycamip/admin/ptctl.cgi?move=down

Left
http://mycamip/admin/ptctl.cgi?move=left

Right
http://mycamip/admin/ptctl.cgi?move=right

Home
http://mycamip/admin/ptctl.cgi?move=h

Pan-Scan (Hidden feature!)
http://mycamip/admin/ptctl.cgi?move=pscan

Patrol
http://mycamip/admin/ptctl.cgi?move=patrol

Stop
http://mycamip/admin/ptctl.cgi?move=stop

Preset 0 (1)
http://mycamip/admin/ptctl.cgi?move=p0

Preset 1 (2)
http://mycamip/admin/ptctl.cgi?move=p1

Preset 2 (3)
http://mycamip/admin/ptctl.cgi?move=p2

Preset 3 (4)
http://mycamip/admin/ptctl.cgi?move=p3

Preset 4 (5)
http://mycamip/admin/ptctl.cgi?move=p4

Preset 5 (6)
http://mycamip/admin/ptctl.cgi?move=p5

Preset 6 (7)
http://mycamip/admin/ptctl.cgi?move=p6

Preset 7 (8)
http://mycamip/admin/ptctl.cgi?move=p7


Additional commands (discovered 9/11/2008)

Reset/Calibrate PTZ
http://mycamip/admin/ptctl.cgi?move=reset

Pan Step in degrees (1-20, default 1)
http://mycamip/admin/pantilt.cgi?p_step=<value>

Tilt Step in degrees (1-20, default 1)
http://mycamip/admin/pantilt.cgi?t_step=<value>

Auto Patrol Stay time in seconds (1-999, default 1)
http://mycamip/admin/pantilt.cgi?staytime=<value>

Pan Speed: 0=Slow, 1=Medium, 2=Fast (default 0, Hidden feature!)
http://mycamip/admin/pantilt.cgi?p_speed=<value>

Tilt Speed: 0=Slow, 1=Medium, 2=Fast (default 0, Hidden feature!)
http://mycamip/admin/pantilt.cgi?t_speed=<value>

Pan-Scan Speed Speed: 0=Slow, 1=Medium, 2=Fast (default 0, Hidden feature!)
http://mycamip/admin/pantilt.cgi?p_scan_speed=<value>

PTZ control by degrees (used for mapped movement):
Directions (up,down,left,right)
Mapped movement on a 640x480 image
Up/Down max = 8 degrees
Left/Right max = 30 degrees

Example: Move right by 18 degrees
http://mycamip/cgi/admin/ptctrl.cgi?act ... &Degree=18

Example: Move down by 2 degrees
http://mycamip/cgi/admin/ptctrl.cgi?act ... n&Degree=2


Misc commands:

Trigger GPIO output (1=enable, 0=disable, default -1 (no change))
http://mycamip/admin/trigger.cgi?alarm=<value>

Night mode (1=enable, 0=disable, default -1 (no change))
http://mycamip/admin/trigger.cgi?night=<value>

Audio input/output in PCM format (Note: Input is HTTP GET, output is HTTP POST)
http://mycamip/cgi/audio/audio.cgi?type=PCM


Additional commands (discovered 9/13/2008)

Set preset
<preset number> = 0-7
<preset name> = [a-zA-Z0-9]string
http://mycamip/admin/ptctl.cgi?position=<preset number>&positionname=<preset name>

List parameters
example: List PanTilt parameters
http://mycamip/cgi/admin/param.cgi?acti ... up=PanTilt
Returns

Code: Select all

[PanTilt]
Enable=yes
PanSpeed=fast
TiltSpeed=fast
PanScanSpeed=slow
PanStep=1
TiltStep=1
PatrolStayTime=1
Position1=dining
Position2=kitchn
Position3=bedrm
Position4=zm4
Position5=
Position6=
Position7=
Position8=
example: List PanTilt Enable state
http://mycamip/cgi/admin/param.cgi?acti ... ame=Enable

Code: Select all

Enable=yes
example : List GPIO states
http://mycamip/cgi/admin/param.cgi?acti ... group=GPIO
returns

Code: Select all

[GPIO]
TriggerInStatus0=on
TriggerOutStatus0=low
Last edited by Setarcos on Tue Sep 16, 2008 1:06 am, edited 6 times in total.
timcraig
Posts: 195
Joined: Mon Dec 10, 2007 5:53 pm
Location: San Jose, CA

Post by timcraig »

FYI,

The Airlink101 SkyIPCam 747(W) cameras (W is for wireless, no W means wired only) look identical to the Trendnet TV-IP422(W). These might Setarcos' tips might work on the Trendet cameras as well.
User avatar
Setarcos
Posts: 44
Joined: Thu Jan 25, 2007 4:51 pm
Location: San Jose, CA

Post by Setarcos »

timcraig wrote:FYI,

The Airlink101 SkyIPCam 747(W) cameras (W is for wireless, no W means wired only) look identical to the Trendnet TV-IP422(W). These might Setarcos' tips might work on the Trendet cameras as well.
These certainly look similar, although the Trendnet TV-IP422 looks a bit closer to the SkyIPCam 777W (USB port, supports MPEG4/MJPEG, etc..)

Hmm, these cameras all appear to be Linux-based. Trendnet has posted the GPL required code, but it looks like Airlink101 hasn't yet followed suite.
timcraig
Posts: 195
Joined: Mon Dec 10, 2007 5:53 pm
Location: San Jose, CA

Post by timcraig »

Yes, you are correct. I didn't notice the usb port and the mpeg4 support. Looks like the AirLink 777 and the Trendnet V-IP422 are more feature rich cameras than the AirLink 747.

I looked at the manuals of the airlink and the trendnet cams (available for download them from their websites). They use the same configuration software and their web UIs are excatly the same. The only difference in the web UI's with between the Trendnet V-IP422(W)'s and the AirLinks 747(W)'s is the UI style and the lack of USB and Mpeg4 options. Everything else in the UI (layout, wording, etc) is the same.

It looks very likely that the V-IP422(W), 747(W), 777(W) cameras are based on the same hardware and firmware design.
User avatar
Setarcos
Posts: 44
Joined: Thu Jan 25, 2007 4:51 pm
Location: San Jose, CA

Post by Setarcos »

timcraig wrote:Yes, you are correct. I didn't notice the usb port and the mpeg4 support. Looks like the AirLink 777 and the Trendnet V-IP422 are more feature rich cameras than the AirLink 747.

I looked at the manuals of the airlink and the trendnet cams (available for download them from their websites). They use the same configuration software and their web UIs are excatly the same. The only difference in the web UI's with between the Trendnet V-IP422(W)'s and the AirLinks 747(W)'s is the UI style and the lack of USB and Mpeg4 options. Everything else in the UI (layout, wording, etc) is the same.

It looks very likely that the V-IP422(W), 747(W), 777(W) cameras are based on the same hardware and firmware design.
Yep, they definitely share much of the same code. I posted some additional commands that I discovered today based on a few Wireshark traces, and a look through the TrendNet TV-IP422W GPL package.

I also sent a request/reminder to Airlink101 for the SkyIPCam 747W GPL sources. These cameras include BusyBox, who's developers are tenacious about GPL compliance. For their sake, I hope it gets posted...
User avatar
Setarcos
Posts: 44
Joined: Thu Jan 25, 2007 4:51 pm
Location: San Jose, CA

Post by Setarcos »

I have just started hacking the audio I/O stuff, and it looks like it should be possible to figure it all out.

The audio stream is MIME encoded, but doesn't have strict MIME compliance. Here is what you get when you start a stream:


HTTP/1.1 200 OK
Content-Type: multipart/mixed;boundary=myboundary
--myboundary
Content-Length: 3868
<data>
--myboundary
Content-Length: 3868
<more data..>


I hacked together a Perl script to extract the payload from the stream, and it after playing with the sample in Audacity, the audio appears to be Mono, 8kHz, Signed 16 bit PCM. The sample seems to have some periodic 'beat' noise (this is probably my script) but is definitely intelligible.

Update: My test Perl app can be dowloaded here.
User avatar
Setarcos
Posts: 44
Joined: Thu Jan 25, 2007 4:51 pm
Location: San Jose, CA

Post by Setarcos »

I spent some more time with Wireshark and realized that there is a 28 byte 'header' at the beginning of every audio data frame which was causing the 'beat' noise mentioned in my last post. The first 4 bytes of this appear to be a frame counter (32 bit), but I haven't deciphered the rest yet.

The good news is I was able to get clean (at least as good as with the windows OCX) audio out of the camera after stripping out the header. I also made a few other updates to my script while I was at it.

The audio dump script is here.

I have also been working on the audio out functionality, but haven't had a breakthrough yet...
User avatar
cordel
Posts: 5210
Joined: Fri Mar 05, 2004 4:47 pm
Location: /USA/Washington/Seattle

Post by cordel »

Sweet Setarcos, thanks for putting the time into this.
User avatar
Setarcos
Posts: 44
Joined: Thu Jan 25, 2007 4:51 pm
Location: San Jose, CA

Post by Setarcos »

Thanks for the support guys!

More good news:

I had a eureka moment last night while playing with some of my audio out code, and was able to get the camera to emit a brief burst of sound from the attached speakers!

Things started working when I stitched a header like the following to the beginning of every data frame:

Code: Select all

Frame 0: 00000000a00f000041000000000000000000000012d2070000000000
Frame 1: 01000000a00f000041000000000000000000000012d2070000000000
...
I have been struggling to get LWP's implementation of HTTP Post to wrap the encoded audio stream the same way the OCX does. The biggest problems come from the fact that the formatting isn't really MIME compliant. From what I have been able to determine thus far, the formatting appears to be:

Code: Select all

POST /cgi/audio/audio.cgi?type=PCM HTTP/1.1\r\n
Authorization: Basic <encoded username:password>\r\n
Content-Type: multipart/mixed;boundary=myboundary\r\n
\r\n
--FITIVISION_MEDIACGI\r\n
Content-Length: 4028\r\n
\r\n
<4 byte frame counter starting from 0><24 byte undeciphered header><4000 bytes of encoded audio>
--FITIVISION_MEDIACGI\r\n
Content-Length: 4028\r\n
\r\n
<4 byte (32 bit) frame counter starting from 0><24 byte undeciphered header><4000 bytes of encoded audio>
...
I'm probably going to ditch LWP and whip up something with a raw TCP session instead...
User avatar
Setarcos
Posts: 44
Joined: Thu Jan 25, 2007 4:51 pm
Location: San Jose, CA

Post by Setarcos »

I finally have a working version of the audio push script (downloadable here). Things went far smoother after I dumped LWP and did things with IO::Socket. It also ends up that the frame counter is a rolling 8 bit number, rolling back to 0 after reaching 255, and not the 32 bit number I had assumed.

The resultant audio does have a subtle 'beat' noise similar to what was happening with the audio dump script before adding the code that removes the header. It looks like I have a little more work to do to sort this out, but it is usable as-is.
killbilly
Posts: 2
Joined: Mon Sep 22, 2008 8:25 pm
Location: Nashville, TN

Trendnet tv-ip422

Post by killbilly »

I think I have the settings correct to pull images from the camera into ZoneMinder, but it doesn't work. In the general tab, I have the Source Type set to Remote and the attached screen shot shows the Source tab. I have the resolution set to 1/4 the full resolution because the other usb webcams I have will only display up to 1/4 their full resolutions; I have tried several resolutions. Motion commands do not reach the camera, either, but if I get the images working, that may follow suit.

I have a different port number for the external internet forwarded to the camera and I can see the standard camera GUI from an internal or external network computer. I assume ZM will want the internal network IP and port.

I have tried both /cgi/jpg/image.cgi and /cgi/mjpg/mjpeg.cgi. Is it true that this camera is using a proprietary format for mjpeg?

Image
I am relatively new to Linux, but ZM is running on an Ubuntu machine at home. The screen shot was taken from my work PC.

Thanks
jameswilson
Posts: 5111
Joined: Wed Jun 08, 2005 8:07 pm
Location: Midlands UK

Post by jameswilson »

we cant see the screenshot mate. If you wanna mail it me ill host it for you.

James
James Wilson

Disclaimer: The above is pure theory and may work on a good day with the wind behind it. etc etc.
http://www.securitywarehouse.co.uk
User avatar
Setarcos
Posts: 44
Joined: Thu Jan 25, 2007 4:51 pm
Location: San Jose, CA

Re: Trendnet tv-ip422

Post by Setarcos »

killbilly wrote:I have tried both /cgi/jpg/image.cgi and /cgi/mjpg/mjpeg.cgi. Is it true that this camera is using a proprietary format for mjpeg?
The OEMed Fitivision cameras (like the Trendnet tv-ip422 and AirLink 747) seem output the wrong MIME type for their MJPEG streams, so any application expecting otherwise (such as ZM) won't work. This will need to be resolved by Fitivision.

Can you view the JPEG still image from your cam from your ZM machine with a web browser at http://<username>:<password>@192.168.1. ... /image.cgi ?

Just replace <username> and <password> with a vaild username/password. (e.g. admin/admin)

This assumes that the cameras IP of 192.168.1.150 is reachable by the ZM host, and the port the camera is using is 80.
killbilly
Posts: 2
Joined: Mon Sep 22, 2008 8:25 pm
Location: Nashville, TN

Re: Trendnet tv-ip422

Post by killbilly »

Setarcos wrote:Can you view the JPEG still image from your cam from your ZM machine with a web browser at http://<username>:<password>@192.168.1. ... /image.cgi ?
I can see the jpeg image in a web browser. But ZM will either show a black image or fail to load any image.

What is the performance difference in zoneminder between jpeg and mjpeg? Will ZM still detect motion when using JPEGs? This is the only IP camera on the network.
Post Reply