It’s been awhile since I posted! Earlier in the year, we had a few unexpected expenses come up in our family. I started spending my spare time in the evenings doing custom freelance programming to help meet the needs. I have been doing this for a few months now which has helped us out.
God continues to bring new visitors to this blog and I have been able to return emails, phone calls, Zooms, and help so many people implement the ideas and software that I’ve created here. It is truly a blessing to see how God has used this little blog I started a few years ago.
I’m excited to share a new project that I have been working on with my team: Control of our Canon XF cameras through a stream deck. We have a couple of these cameras here at my church, the Canon XF 705 series:
I have been mentoring the guys who work part time in A/V here with me on how to write code and specifically code modules for the Companion project that we use so heavily here. We decided it would be great if we had control of these particular cameras at our shader station alongside the shader control of our Marshall cameras (I wrote about that here) and our broadcast cameras.
These Canon cameras come with a LAN port (you can also use wifi) and it runs a little web server called the Browser Remote which allows you to have full control of all the camera functions, from focus/zoom/iris/gain all the way to recording, white balance, and shutter control. If there’s a button on the camera, chances are you can control it from the browser remote. You can even see a live preview of the camera!
So we started doing some digging, and realized that there is an internal API on the camera that returns a lot of the data in simple JSON sets. Once you initiate a login request to the camera, it returns an authentication token, which must be sent along with every future request.
For feedbacks on the camera state, we simply poll the camera every second or so. The browser remote page itself seems to do this as well, so we just emulated that.
The browser remote unfortunately only allows one user at a time to be logged in, so when our Companion module is in use, the actual browser remote page can’t be used. But for our purposes, that’s not really an issue since we just want to have button control of the iris/gain functions when we use these cameras during live services. Now I don’t have to ask my operators to iris up or down, I can just do it right from the stream deck!
Here’s a little walkthrough video that shows the module in action:
The module will soon be a part of the Companion beta builds, so if you have a Canon XF series camera, go check it out!
Well Done! I’m impressed and this is extremely helpful and very much needed. Is the Panasonic BGH1 next? Lol. We’ve been forced to use PTZ cameras because there’s no other way to control zoom/focus/WB/Iris….remotely. Some cameras now have a web page which is useful but not enough. This is exactly what’s needed. Now if they would only make a 128 button StreamDeck… and an IP controlled PTZ head that’s not enormous or expensive.
LikeLiked by 1 person
I don’t have access to a BHG1, but if you have one and can get me access to it, we could discuss offline about how to make that happen. Feel free to reach out to me via the contact form!
Wow, what a great tool! I am having trouble finding the Companion beta build with this module in it, would like to try it out. Could you link to it please?
It actually hasn’t made it to a beta build yet. I thought it had. Sorry! You’re welcome to create a build or run from source if you need it ASAP.
Will this work on any Canon camera with Browser Remote? Like the C200?
I’ve heard it works with the C200 but I’ve never been able to test it. It doesn’t work with other cameras like the XF605 because that uses a different protocol.
I’m trying to do something like this for QLab. Is it possible to send commands via OSC? Or how I would find those?
Too bad I can’t remote control my Canon XF105!
you might be able to hack something using the camera’s LANC port.
Thanks for the thought, but I don’t think the XF105 has an LANC port. At least, I can’t find any mention of it in the manual.