Video Switcher Scripts
The machine that implements our
Our video webcasts
takes a single NTSC baseband video signal as input to its video
capture card. We've got a bunch of cameras in the club, so something
needs to switch between the cameras in order to feed different signals
to the webcast machine.
That something is a
Knox RS16x16 video matrix switcher. Basically, it's
a big box that has 16 inputs and 16 outputs, and you get to pick
which of the inputs each of the outputs is fed from (so each input
could go to all of the outputs, none of them, or anywhere in between.)
There's a keypad on the front panel that lets you change the routing
and program simple loops. But the cool thing is that it also has a
serial port on the back, so you can do your switching from a computer.
We used to have a small computer up there next to it, and it
talked to the serial port directly. But these days we have a
Lantronix UDS-10 serial port to ethernet adapter
plugged in to the switcher instead, and the software that controls
it is running on a computer that is physically elsewhere.
One of the outputs from the switcher goes directly into the video
cards on the webcast computers; the other fifteen outputs go into a
set of RF encoders
Triple Play) that put each of those signals onto a different UHF
channel on the private cable TV system we've got running through the
club. We used to have a bunch of televisions scattered around, and by just
plugging them into the cable and picking a channel, we could have them all
displaying random images from the various cameras. Since there were
15 channels to choose from, it was easy to set things up so that no
adjacent TVs have the same image on them. (We've since gotten rid
of all of those TVs, though, so the "cable system" is now vestigial.)
|| This is a shell script that talks to the
Knox switcher over the serial port (or network, via the
serial-to-ethernet adapter). Command line options
control what gets switched where. It also has provisions
for looping and for randomly switching certain ranges of
inputs to certain ranges of outputs.
|| A simple init.d script that launches
at boot-time: they runs in a loop and poll the file
/etc/switcher.conf for the current command-line to use.
To change what the switcher is doing, I can just change
a single file, instead of having to kill and restart the
|| This is a CGI script that controls the
switcher remotely: it lets you edit the switcher.conf
file graphically. The
switcher-cmd daemon will notice
and react to the changes.
Here's an example of what it
looks like when it is running (no, you can't use this page to
control our cameras!) The rows represent inputs (cameras)
and the columns represent outputs (TV channels, and the
webcam.) A checked box means that the switcher may
connect that input to that output. So, each time
delay seconds pass, the switcher looks at the set of
allowed inputs for each output and picks one at random.
One unfortunate thing I've noticed is that the switcher doesn't
seem to like to be told to switch more than about twice a second:
any faster than that, and it seems to suffer serial port overruns,
or something along those lines.
This makes me sad, because it turns out that our lighting
controller can output MIDI, so I had this idea that some of the video
switching could be keyed along with lighting changes by simply
putting a MIDI card in an adjascent Linux box. But alas, it seems
that it can't switch fast enough to make that be realistic...
In addition to the scripts to control the Knox switcher, I also
have scripts to control a
Panasonic WV-NS324 servo-mounted video camera. This
camera is pretty cool in that it has a "real" video output, but also
has an ethernet interface and a built-in web server, so you can
directly control it over the net.
But, it's very much not cool in that every now and
then it gets confused and all of its preset camera positions shift
by around 30 degrees, so it will suddenly be pointing at completely
different parts of the room than you wanted until you manually
re-enter all the presets. Maybe there's a belt or gear slipping
inside it or something; I can't figure out what the cause is. This
problem started only a few weeks after I bought the camera, and the
response from both Panasonic and the store I bought it from was,
basically, "sucks to be you."
So I wouldn't recommend this camera at all, and I would have
returned it if they hadn't refused to give me my money back.
Due to a comedy of errors where we thought the camera was
dead when it actually wasn't, I actually ended up with two of
these, so one is mounted up high, and one is under the balcony.
|| This script that reads the same config file
that switcher-cmd does, and
based on the commands in that file, tells the camera to
point at one of its preset positions. In this way, I have
a single config file that controls both the switcher and
the robo-camera (and that file is written by the
switcher.cgi web page.)
|| The WV-NS324 has a built-in web server,
with controls that let you manually zoom the camera,
save positions as presets, etc. Those web pages have
some problems, however. They're overly complicated
(many commands are spread out across multiple pages),
but most importantly, the "joystick" control on the
web pages (by which you actually move the camera)
doesn't work in Mozilla
or Safari (it
was coded for MSIE and Netscape 4.x only.)
So, I wrote my own UI for camera control, that works
by posting to the underlying "control" URLs on the camera,
bypassing the on-camera user interface. Works pretty good.