simonmitchell / rocc

A Swift framework for remote control of digital Cameras
MIT License
119 stars 15 forks source link

Proposal: Supporting other camera manufacturers #35

Open simonmitchell opened 3 years ago

simonmitchell commented 3 years ago

This issue will be a log of my plan of action and implementation of support for camera manufacturers other than Sony in ROCC!

Motivation

I want ROCC (as well as Camrote) to be as useful a tool as possible for as many photographers and developers as possible. Until now my main focus has been on Sony cameras (with that being the brand of camera I own) but after implementing PTP/IP for Sony’s latest lineup of cameras I – unbeknownst to me – did a lot of the groundwork for supporting a lot of other manufacturers!

Roadmap

Release v2.0.0

As Camrote (as well as other iOS apps) rely on a stable library for controlling Sony cameras it is vitally important that none of the work done when refactoring PTP/IP support (a necessity to reduce complexity and duplicate code across manufacturers) breaks support for these models.

For this reason, the number one priority is releasing v2.0.0 of Camrote along with an extensive suite of tests for Sony devices using PTP/IP support. This is already underway but requires some time as it is a painstaking process making sure hex packets being sent and received are spot-on.

It is also important to make Camrote as accessible as possible to devs, so I will also be concentrating on adding support for SPM in this release if possible without refactoring large areas of the codebase.

v2.x.x Releases

I am very optimistic that support for other manufacturers will be able to be added without any breaking changes now that Sony PTP/IP support has been completed, however this may need to be re-assessed at a later date depending on implementation discoveries when trying to refactor or implement support for other manufacturers.

Whilst adding support is theoretically possible without me having test devices (which I am unable to afford at present) I am hoping I will be able to lean heavily on technical folk in the photographical community to test beta releases of Camrote, or even to develop support for other manufacturers themselves via forking and submitting pull requests to this repo.

Once I have refactored the project to a point where I think this is possible (using a wireshark dump of the Canon remote app provided by a kind Reddit user) I will create a guide on how to implement and test other manufacturers, and likely also produce a demo app to test functionality without having to write any code.

Task Tracker

2.0.0

2.1.0 (Canon)

2.x.x Further Manufacturers

What Can You Do?

ROCC (And Camrote) are very much part-time ventures for me, and I’m not at a point in my life when I can invest money (or large amounts of time) in them! There are many ways you can support the ongoing development, both financially and non-financially!

Provide input/insight on this proposal via the comments

This is the first library that I have ever sole-developed that has had such a large scope and has had this many stars... I am not by any stretch of the imagination an expert in computer science or networking technologies so any advice/insight etc on any of the code or approaches is greatly appreciated!

Provide financial help

I do not have the money to buy devices from all manufacturers, but any money that is donated via the Camrote website, via my buymeacoffee or via the “fund me” options in Camrote (please don’t use this, as Apple get a 30% cut) will go directly towards buying test gear!

Contribute!

Once i have guidelines out for how to add support for other manufacturers (or even before) please contribute to ROCC (in any way) to make sure it’s as good and as stable as possible.

Send me Wireshark/Packet Dumps!

If you don’t have the money to contribute financially, but happen to have a camera from another manufacturer please, please, please provide annotated Wireshark dumps from the remote control app your manufacturer provides! I will be providing instructions on how to do this shortly...

Send me your old gear!

We all have old cameras lying around (sadly my old Canon was too old to have a WiFi chip), if you do, and it’s just gathering dust, or broken horribly (but still controllable remotely) then please consider donating it to the cause! If you want details on how you can do this then please contact me: support@camrote.app

Thank you for taking the time to read this! I look forward to all of your input ☺️

pluginslab commented 3 years ago

Hey Simon, great work here. I was interested into getting this to work with Fujifilm cameras, they are very popular. Any tips where I could start working on a new version of your SDK to get their cameras supported?

simonmitchell commented 3 years ago

Ooooh nice!! And hi there @pluginslab ☺️ So I will try and have a think about how we could work on this at the same time (Although I have been on other things recently to be perfectly honest) and get back to you in more detail over the weekend. Long story short though is that I have made some progress on Canon support here: https://github.com/simonmitchell/rocc/tree/feature/canon_support

What I have started doing:

There's a lot more that needs doing though to get it in a good place! Do you have experience with PTP/IP or know if that's the mechanism Fujifilm even use? I'm sure I've seen some fujifilm code in a library that I referenced a lot to get started with both Sony and Canon's PTP/IP implementation libgphoto2.

It will help A LOT if you have access to a fujufilm camera (guessing you do?) and also have experience with Wireshark, I used Wireshark a lot to debug PTP/IP behaviour on Sony's cameras. I also have a node.js tool for mocking sony cameras on your local network, but it's not in a very good position really for usage, and it's proven to not work at all with Canon's app. It was super-useful with Sony because it tricked the official Sony app into connecting to it so I could see exactly what the Sony app was sending to the camera without owning every single model!