I’m interested in developing (or interfacing with) an accessory that transmits video over USB using the UVC standard, and I’d like to better understand how this works within the MFi (Made for iPhone) program.
This is actually pretty easy to answer, as the answer is "it doesn't". That is, the MFi program simply doesn't have anything to do with this.
Let me start by explaining what's going on here:
From what I understand, USB-C iPads appear to offer more direct support for standard UVC devices.
So, there are actually two iPad-specific options here:
-
iPadOS support DriverKit, which, at a purely technical level, means it's possible to create an iPadOS app that directly communicates with "any" USB device.
-
iPadOS also includes a class-compliant driver for UVC (USB Video Class) devices. For more information on that, see "Support external cameras in your iPadOS app" from WWDC2023.
To some extent, #2 exists to minimize unnecessary disruption from #1. That is, it was (and is) always going to be possible to make a camera "work" through DriverKit; however, actually doing so would also require a VERY substantial amount of work. Including UVC support in the system avoided creating a situation where developers were trying to cobble together a solution based on DriverKit.
That leads to here:
- Do iOS devices provide native support for UVC over USB-C or Lightning?
No. More specifically, iOS does not support DriverKit (#1) or include UVC support (#2). What works on iPadOS simply does not work on iOS.
within the MFi framework?
MFi doesn't really change any of this. More specifically, nothing in the MFi program will make either of the paths above function, nor does the MFi program currently license any technology that's intended to provide anything like UVC support.
Strictly speaking, the MFi program allows you to create hardware that can communicate with apps using a specific hardware protocol ("iAP2") and the ExternalAccessory framework. However, in practice, I think trying to use that technology to transfer video is a very bad idea. I haven't looked at its most recent performance (on USB 3), but the protocol is optimized for communicating relatively small amounts of data with relatively low-end hardware, so its actual performance has always been WELL below what the bus is theoretically capable of. Similarly, translating UVC to iAP2 would be quite difficult and is very unlikely to yield good results.
That leads back to here:
I’m interested in developing (or interfacing with) an accessory that transmits video over USB using the UVC standard
The big question here is really "what are you actually trying to do"? If your goal is to expose a camera to the larger system (like UVC support on iPadOS does), then I don't see any way to do that. However, if your goal is to import video into your own app, then the most direct way to do that is through the network (basically, create a webcam), either over WiFi or through Ethernet-> USB.
__
Kevin Elliott
DTS Engineer, CoreOS/Hardware