GoPro has just announced a new open API for 3rd party companies/apps to use, called Open GoPro, allowing them to integrate with their cameras, starting with the GoPro Hero 9. The API (Application Programming Interface) allows a slew of functions over wireless interfaces, including control as well as transfer of media. Most notably, the API is not ‘gated’ behind some corporate partnership deal, instead, anyone can get to work creating apps to integrate with it.
If a GoPro API sounds familiar to you, it might be. It was a mere half a decade ago that GoPro announced their GoPro Developer Program. In theory, it covered many of the same features as today’s program. But in practice, it wasn’t open. So we saw some companies, like Polar, actually implement it in their products (ok, a handful of products). So did some drone companies, including 3DR & AirDog. But it required GoPro to set up a partnership there with all the complexities that brought with it. Other companies, such as Wahoo though, couldn’t get into the program (they tried, hoping to integrate it with the Wahoo bike computers).
Whereas, this new open program resolves that, as there’s no longer a gatekeeper to the program. It’s just an open interface anyone can use.
And the potential is massive for people wanting to develop Really Cool Stuff™. For example, in reading through all the documents, in the sports realm, one could develop:
– A Garmin Connect IQ App for your bike computer or watch to control the GoPro – A desktop app to automatically connect wirelessly to your GoPro and offload all the content to a local computer or NAS device
– FPV drone control integration, without having to hack things apart
And in fact, at launch, there are five specific scenarios that are being lit-up by 3rd party companies:
– Amazfit watches will have GoPro camera control from the wrist. – Sena cycling helmets will have voice control of your GoPro – Centurion Boats: wirelessly control a GoPro from the boat’s helm control screen – Orqa: FPV goggle control (drones) to see camera status in goggles
– Pixellot: They do sports broadcasting, this controls all the GoPro’s and handles content transfer
However, there are some limitations that, at least in this first iteration, mean the world isn’t entirely your oyster. There’s no support for capturing the video stream live, nor is there any API connectivity into GoPro’s online platform, formerly known as GoPro Plus (to access your stored media there). Still, maybe later.
For the geeks in the crowd, press on. For everyone else, fear not, I’ll circle back when I find some cool apps down the road worth mentioning (after developers have a chance to develop them).
A Quick Explainer:
Obviously, this is gonna get geeky…really geeky. But not as geeky as it could be. I’ll leave it to you to dive into the full code examples and demos, as well as actual API documentation. Instead, I figured I’d get the highlights out of the way. Invariably though, like any development project, it takes a bit of coding to really start to understand the potential (and limitations).
GoPro says that for this iteration, they’re focused on these key camera areas, all at the device layer. Meaning, talking directly to the camera (versus talking to the GoPro app or GoPro cloud):
– Wireless connectivity – Camera status – Camera command and control – Preview
– SD card access
At present, this is launching on the Hero 9, but I’m gonna take a guess we’ll see it expand backwards to other cameras, just like they did with GoPro Labs (now supported on the Hero 7, Hero 8, Hero 9, and Max). It makes sense to start small. Plus, they even have a table in their documentation that lists just a single entry. No point in having a table for listing one item.
Now GoPro’s media e-mail states both wired and wireless connectivity, though all the documentation just mentioned wireless. So my guess is wired is coming soon too. For the wireless side, there’s two ways to interact with the camera:
– Via Bluetooth Smart
– Via WiFi
However, in order to get access to WiFi, you’ll need to enable it via Bluetooth Smart. This is how GoPro cameras have worked for years, in that your phone typically initializes the connection via BLE, turning on the WiFi (thus, saving battery). Back in the ‘old school days’, pre-BLE, WiFi was just on all the time (and, then, the cause of some interference issues with certain bike computers too…). As usual, a GoPro keeps its BLE service running in the background for 8 hours after the last button press/going to sleep (meaning, even after you power it off, it’s still sending BLE advertisements for 8 hours, which is how you can find it when you lose it).
In order to connect to BLE, your app (or device, like watch) will establish a pairing with the camera, in the same way you pair the GoPro app. It’ll save this pairing for subsequent pairings.
Meanwhile, for the WiFi side, authentication to the camera merely requires inputting the GoPro’s unique WiFi SSID & password, making it relatively easy to connect to for apps and/or devices. However, based on everything I can understand right now in the documentation, the limitation is that you can’t have the GoPro connect directly to your own home network and leverage the API that way. That would have been very useful for offloading footage directly onto your network (akin to what it does for GoPro’s cloud solution, but to them). With the way it’s implemented today (assuming I’ve understood everything correctly), an app connects directly to the GoPro, and then pulls data via that direct WiFi connection over a small HTTP server that the GoPro runs.
Once connected, there’s a number of umbrella operations, which are as follows:
- Capture photo/video media
- Get media list
- Change settings
- Set date/time
- Get camera status
- Get media metadata (file size, width, height, duration, tags, etc)
However, within those, you can access tons of settings or file operations. For example, there’s a table of some 113 different status codes at present that you can query to find the state of the camera. Here’s a small snippet of those:
The proper snarky answer to status code 6 is always ‘1’. I kid, I kid…mostly.
Now, in a nutshell, all the comments that GoPro has exposed essentially allow you to pretend to be a user on the device itself. That means you can change settings, start/stop recording, change resolutions, look at file properties (like videos or photos), and even download those videos. In fact, you can even trigger so-called ‘Turbo’ mode for faster WiFi downloads of media.
The company has published all of this over on GitHub, including walk-through tutorials in Python and Bash. And then demos in C/C++, C#, Python, and Swift.
The tutorials especially are very well made, chunked first into chapters:
And then they dive through each step of what’s going on, and are chunked into different chapters. Here’s a tiny snippet of one chapter:
Lastly, for fun, it’s worth noting that in the documentation there’s plenty of cleverly worded implications about what a GoPro Hero 10 might look like feature-wise (assumed for ~September). For example, in the ‘Chapters’ section, there’s this seemingly innocuous tidbit:
Except, as one that has written plenty of technical documentation on how things work when you know the next version will change it (but want this document to still be valid when you forget about it later), you say stuff like this. Otherwise, you’d simply say “All GoPro Cameras limit file sizes…”, which is true, till today anyway.
Of course, even that’s a bit untrue, as one of the GoPro Labs options is to tweak this setting and do far larger file sizes, which is available on a number of past cameras. In any case, my suspicion here is that the Hero 10 will finally do away with requiring 4GB file chunking, which is frankly just a solid annoyance in 2021.
Oh, and remember you’ll need to ensure your Hero 9 is on the latest firmware, which just came out today, in order to support this.
This is awesome. Simply put. Sure, I’d love to see it on more cameras (hopefully soon, as the documents seem to imply), but having this at all is a huge step forward for the company. While GoPro labs was great for power users last year (and some of those features grew up to normal features, and new Labs features in 2021 too), this API is actually great for normal consumers too – even if they don’t realize it yet. With GoPro launching today with companies like Amazfit doing watch control, and even a boat company (Centurion Boats) enabling GoPro control directly from the boat’s helm, these are real-world solutions that people will actually use.
My two personal hit-list of apps that I’d love to see are:
A) Garmin Connect IQ app to control a GoPro (or, even better, native integration): Sure, native integration is great since it appears Garmin is done with their VIRB foray. But Connect IQ wouldn’t require any Garmin intervention at all, any random developer could do this. Hit me up if you do, and I’ll write about it, pronto! This would be killer within the newer GoPro Hindsight feature on the Hero 9, since it’s doing a rolling 30-second buffer, so that I could tap something on my bike computer to grab whatever crazy event just happened.
B) File offloading to a NAS: Within their press kit, they mention that Pixellot is using this for offloading of content into their sports broadcasting platform. I want basically that, but at my office. I want to be able to walk into the DCR Cave with a pile of GoPro’s, plug them in, and have the content offload quickly via WiFi to my NAS server. Or at worst, a directory on a computer. I don’t want to use my phone to do this. A Mac or PC driven app is where this would live (well, ideally it’d automatically do this without any app driving it, but that’s not plausible here).
I’m sure other folks will have other ideas. But those are the big ones for me, especially the file offloading bit. Even right now, coming back from a run, I’m sitting here wishing the videos from that run were already accessible to my Mac & PC, rather than dealing with fiddling with the GoPro app to get them synced over to my phone (taking up space, where the GoPro app currently occupies 80GB of storage on my phone), then duplicating that content into the phone’s Photos, and having my phone be preoccupied while it’s doing all that.
Of course, I probably could just write this app myself. Or, I could eat ice cream. Both are valid choices.
With that – thanks for reading!
At the end of the day, I’m an athlete just like you looking for the most detail possible on a new purchase. These posts generally take a lot of time to put together, so if you're shopping for the GoPro Hero 9 Black or any other accessory items, please consider using the affiliate links below! As an Amazon Associate I earn from qualifying purchases. It doesn’t cost you anything extra, but your purchases help support this website a lot. Even more, if you use Backcountry.com or Competitive Cyclist with coupon code DCRAINMAKER, first time users save 15% on applicable products!
And of course – you can always sign-up to be a DCR Supporter! That gets you an ad-free DCR, access to the DCR Quarantine Corner video series packed with behind the scenes tidbits...and it also makes you awesome. And being awesome is what it’s all about!