I would like to have an application created from scratch that will allow me to control a web cameras pan tilt zoom functions. I would prefer that the program be written in flash but ultimately whatever makes the most sense is OK with me.
I already have an interface in mind that I would like to create and it is essentially a rectangle say 500px wide by 300px high with a slider in the center of this rectangle that can be dragged to various locations within the rectangle. I would like the rectangle to be broken up into 2009 separate grid quadrants with 49 rows and 41 columns. The center quadrant (0,0) is where the slider will appear when the application loads. A user can then drag the slider marker around the rectangle to the various quadrants which will send commands to a php script which will then relay the command to a daemon running on the computer which the camera is connected to via serial port to perform the sent function.
Each time the slider crosses into a new quadrant a new command will be sent. If the user releases the slider it will snap back to the center and send a command to stop the previously sent function.
The php script has already been written as has the daemon. The php script runs on the web server and the daemon runs on the computer which the camera is attached to. The application to be written could either send an http get request to the php script or it could send it directly to the listening daemon directly to bypass the php script altogether. I believe this would likely be the better way to do things so this is what I would prefer but I do not know if flash has the ability to communicate with a remote server in this manner. It seems like it would be able to but again I am not sure.
There will also need to be a slider to the right hand side of the rectangle which will control the zoom of the camera. The zoom function of the camera has 1024 different zoom depths so the slider will need to have as many levels as possible to get the most precision out of the zoom without going crazy. For instance if the zoom slider was as tall as the rectangle (300px in my example) there could be 30 equidistant zoom levels 10 pixels away from each other and 34 zoom levels from each other. The zoom slider should remain where the user drags it to and it should not snap back to center.
I would also like the ability to be able to easily lock the control when I do not want users to be able to control the camera. I would like there to be a built in queue so that only one person can control the camera at a time in the order which they loaded the application. I would like to application to be easily modifiable to only permit so many functions to be sent per second. I would like the application written to allow two functions per second to be sent to the camera but I would like to know how to change it should I need to. Commands should not be buffered, in the event that a command is lost so be it. I do not want users to be able to drag the sliders all over the place and then have the camera catching up to all of the commands that were sent.
This is probably pretty easy for someone familiar with flash as I started to create this application myself with my limited knowledge of the program and I already had the basic functionality working via the php script. I only had 9 quadrants in my program for testing purposes only and I was able to get it working.
I have attached a photo of what on such application looked like and you can see in the photo the pink slider marker in the middle of the rectangle is what the user would drag to control the camera. The + and - signs to the left and right were for zoom and focus. My camera uses auto focus so the ones on the left will not be necessary. I would like the person hired for this project to use their imagination in duplicating the interface in the photo while maintaining its' general look. I like the motion blurred arrows they have going in all 8 directions.
I would like to revise the part about there being 2009 quadrants to say that there will be 165 quadrants. 15 rows across by 11 columns.