camera-control-feature

I was recently part of a team responsible for installing PTZ (pan, tilt, zoom) cameras at our local congregation. After looking long and hard for a quality and affordable solution, we ended up with two cameras from PTZOptics. One of the key features we needed in a PTZ camera was the IP stream and control. While the hardware for these cameras is great, the software left a lot to be desired.

 

Open Source is Not Always Synonymous with Quality

The provided software was free and open source. That's great, but it was a very old html and javascript app, all written with tables and inline css and javascript. In addition, it was very buggy, some things, as simple as typos, meant entire features of the camera were rendered broken. So, I got started looking through the code and at first was just going to fix and clean up what they had provided. After spending some time with it I decided it would be worth it to completely start from scratch.

The base functionality of the camera is controlled through a series of URLs passed over IP to a CGI script installed in the camera itself. This meant all I had to do was send a URL with whatever parameters it called for to the camera's IP address on the local network. I ended up doing this with jQuery and AJAX requests. The basic UI was built on top of Bootstrap overlaid with custom images and design for all the buttons and pieces of the interface. Rewriting the app also gave me a chance to implement some features the original didn't have, like a kind of auto-pan function, and saving settings to HTMLs local storage for quick easy setup.


CameraControl 

Once everything was in place I realized it could fairly easily be converted into an actual desktop app. Rather than using a web browser to access it, including all the clutter and overhead that comes with, I could have it run in it's own window and keep the desktop much cleaner. I had never used Electron before but I had heard of it and knew that Github Inc. had built their Atom editor using it. Basically, it packages up web technologies (HTML, Javascript, and CSS) into native OSX, Windows, and Linux apps. After reading through some of the basic docs and going through the starter project I was pretty certain I could use it to build my web app into a desktop app.

A few terminal commands later I had a native Mac OSX version of my web app. This meant I could give it an icon, have it startup with the computer like I needed to, and keep it contained in it's own small window. Probably my favorite part was designing the icon; I think it turned out pretty good. Once I had a basic app working I continued to tweak it until it felt solid. The last thing I did was to open source the project so anyone else in need of some better software for the PTZOptics cameras would have something more than the buggy old stuff to work with. If you're interested in the code you can find it over at Github available under the GPL 3.0 license.

Compiled and Ready to Use!

Added compiled, ready-to-use, release version of the app for both Mac OSX and Windows. You can get'em at GitHub here.