We have a Panasonic AW-HE40 located in each auditorium at my church to allow the control room operators to see the space. We also occasionally use them as on-screen cameras since they have HD-SDI outputs. The quality is surprising for the size of the device.
The cameras come with a fully functional webpage that allows you to control them.
By peeking around at the code some, I was able to figure out how to send HTTP requests to change presets of the camera.
Here is my Ross Dashboard custom panel that allows our volunteers to quickly pull up presets:
If you use my panel, you’ll still need to manage/modify the presets using the existing interface. We don’t change our presets often, so I didn’t feel the need to recreate any other functionality than recalling presets.
I’ve had a few people ask about my custom panel in Ross Dashboard that controls Aja Ki Pro recorders using their built-in RESTful API, so I thought I would write a quick post about how that works.
AJA has done an excellent job of creating an accessible device with their API. The web browser interface is great and you can edit or control nearly every aspect of the device from there. The main reason I created the Dashboard interface was to limit that control and simplify the use for volunteers who may not want to get into the complexity of it all.
Their RESTful API takes simple parameters as querystrings and returns JSON data that can be easily parsed for the results and manipulated.
My panel in Dashboard just takes advantage of this API to make all of the requests to get and set the data. By using a timer function, I am also able to keep the Dashboard panel in sync with the physical state of the actual Ki Pro deck, which is helpful in case someone manually presses a transport button or otherwise makes a change.
If you are interested in everything the Aja Ki Pro API supports, you can get a list of all available parameters by going to:
A few months ago, I picked up this nifty device called a Stream Deck made by Elgato Gaming. It’s a 15-button USB keyboard with LCD buttons. It’s primarily marketed towards gamers who live stream so they can have quick access to commands and functions as they stream. The programmer in me couldn’t resist trying it out to help us with our production setup.
Using the base software provided, I was able to fairly quickly implement a workflow to allow volunteers to have easy access to buttons that then fire commands on our Ross Dashboard Production Control ecosystem. If you’ve not used Dashboard before, you can read about how we use it at my church here. It’s fairly easy to set up a custom panel in Dashboard that runs an HTTP web server at a specific port, which in turns allow you to “click” a button on the panel by calling that button’s trigger ID remotely via a specific URL.
Using the “URL” method provided in the base software, we are able to make web calls to the Dashboard custom panels to fire the commands. All the logic/code remains in Dashboard, and this just becomes a method of executing those commands remotely via an HTTP request.
We used the base software for a few months without issue, however quickly realized the limitation of not being able to have bi-directional communication between our Dashboard Production Control and the individual Stream Decks. For example, several of our commands act as “toggles”, meaning we can have a few different state options that represent the current status of a device. If I only had one person making changes or operating the system, it wouldn’t be a huge issue. That person would hopefully remember what button they pressed last. However, when there are a lot of moving parts and multiple people controlling systems, the ability to update status on all devices becomes very helpful.
Enter NodeJS. People smarter than me took the time to write a base NodeJS library to control the Stream Deck. I hadn’t written in NodeJS before, but being a programmer, I was ready to learn something new. I downloaded and installed all the necessary libraries, IDE, etc. and quickly whipped up some code using the base library to control our stream decks. In just a few hours, I had something operational and started running it from the command line. I then spent a couple of weeks refining it and now we have a fully functional, self contained app that can run on Mac, Windows or Linux. It’s packaged using the Electron libraries made freely available with the Node platform.
My controller software uses a base JSON file which defines the button structure of the stream deck. This makes it very flexible and expandable as our needs grow as I can just modify the JSON file to change the button structure.
The software then parses that JSON and builds the buttons on the Stream Deck in real time. If a button has a trigger action assigned, the command is sent to the corresponding device. I’ve written support for several protocols, including the Dashboard Web Call, RossTalk (good for sending messages to your Ross equipment), OSC, VideoHub routing, and more. You can even do internal stuff like jumping from one button page to another, changing button images during actions, etc. Each button can support an unlimited number of button actions, which I called triggers.
It also supports defining a set of devices, so if there’s a device you want to send messages to often, you can define the device in a separate file along with its host, port, type, etc. and then only refer to that device in the button structure. That way, if any of those related variables change, you only have to change it in one place.
The software also runs a basic TCP listener server on a specific port, and this is where the bi-directional communication comes into play. Anytime a command is run on the master Dashboard Custom Panel Production Control, it relays a message to the remote Stream Deck via the TCP listener and updates the state of the button.
This means that we can run commands from any originating location, whether it is the web-based production control (that I’m still developing), one of the remote Dashboard panels that connects to Production Control, one of the Stream Decks (we currently have 2 of them, one in each control room), or even the Master Control panel and every device will receive an updated status.
I also added a “Virtual Deck” option, which allows you to operate the software with or without having a physical Stream Deck attached. You can also choose to have the Virtual Deck operate independently of your physical Stream Deck, so it’s like having two decks in one!
I am making this software freely available to anyone who can benefit from it. My hope is that the local church can make use of this to allow their volunteers to more easily operate tech equipment during services.
Here’s a quick post to share how to control your BlackMagic VideoHub from a Ross Dashboard Custom Panel.
If you have any BlackMagic VideoHub router, it comes with software that allows you to make routing changes over the network. It’s pretty simple and easy to use.
What you may not know is that it can also accept telnet commands by default over port 9990. This means you can control it from a command line, or by sending TCP messages.
Ross Dashboard has a built in function, rosstalk.sendMessage which is designed for sending simple TCP messages. Combine these two things together, and now you can have a button on your own custom panel where you can make a video route easily.
In Dashboard, create a new custom panel, and add a button to that panel.
Under Tasks, click “Add”, and type in this code:
var command = "VIDEO OUTPUT ROUTING:\r\n";
var videoHub_address = "192.168.1.100";
var destination = 5;
var source = 25;
command = command + (destination -1) + " " + (source - 1) + "\r\n\r\n";
rosstalk.sendMessage(videoHub_address, 9990, command, null);
The router operates with zero based indexes, which means if your destination number is 5, for example, the router treats it internally as 4. So, this script just substracts those numbers internally before submitting the command to the router.
At my church, we rely heavily on Ross products for our video systems. We have two Carbonite switcher panels/frames and several OpenGear frames with cards doing things from audio embedding/de-embedding, video up/down/cross conversion, fiber conversion, etc. The Ross framework makes all that possible.
A great product that Ross makes is their Dashboard software. It’s free, cross-platform, and with the community forums available, you have a lot of power at your fingertips to control all of your equipment. I would highly recommend it even if you don’t use other Ross products.
In ministry, it’s always great when we can create simpler systems where volunteers can succeed, which is why tools like this are so valuable. I started creating my own custom panels in Dashboard about 4 years ago. The first one I created was a panel to control and arm our Aja Ki Pro recorder so we could easily record the sermon video for later editing. The first version wasn’t too fancy, it basically just allowed you to enter a custom clip name and start/stop recording, but it suited our needs.
I later wrote a full transport control version that allowed you to cue up or delete clips, rewind, fast forward, etc. I’ve made both versions of this custom panel available and there are churches, new stations, and government agencies all over the country using both version of these panels. This is all possible because Aja created a RESTful API that can be used to access their KiPro devices, and through Dashboard, we can take advantage of that.
If you’d like a copy of this panel to use in your church, let me know. I would be happy to send it to you!
I’ve also created custom panels to turn on/off projectors and do simple operations on the video switchers (by firing custom controls through Dashboard), and over time this developed into the complex but flexible system we use today. Now we have a “master production control” custom panel that is always open in DashBoard on one of the production machines.
Then, each production machine has Dashboard installed and is running one of the remote panels I’ve created.
Here is an example of one of the remote panels, used primarily for turning projectors on and off in one of the auditoriums and controlling screens we use in those rooms. I tend to customize these panels for their application, only giving them the command options necessary for that area.
This master control panel is where all of the code lies that does the actual work, whether it is turning a projector on, executing a custom control on a video switcher, setting a PTZ camera preset, etc. This is great because now anytime I make a performance improvement, add a new feature, etc., I only have to add it to the master control panel, and the remote clients will get that benefit when they execute the command.
The remote panel simply sends a web HTTP request to the master panel at a specific address and port, which triggers the corresponding button on the master panel.
The master control panel then keeps track of the remote listeners and sends updates as commands are executed. Right now, I primarily use this to update an activity log on each remote client, or to update the state of a button if needed, but the flexibility is there to do what I want, and all of the clients can stay up to date no matter who pressed a button from any particular machine.
I hope this gives you a few ideas for your tech ministry on ways to simplify equipment and production control! If you need help along the way, drop me a line. Happy coding!