Area: visionOS 26.4 · AVFoundation · AVCapture · External/UVC video
Classification: Suggestion / API Enhancement Request (also: Incorrect/Missing Documentation)
Device / OS: Apple Vision Pro, visionOS 26.x. Xcode 26.4.1, XROS26.4.sdk.
Summary
On visionOS, a third-party app cannot display two UVC USB cameras (connected through a powered USB-C hub) at the same time. Every AVFoundation path that would enable this on iPadOS is either unavailable or fails at runtime on visionOS, and there is no public non-AVFoundation fallback (no IOUSBHost, no DriverKit, no usable CoreMediaIO, no MFi path for generic UVC devices). This is a real capability gap relative to iPadOS and macOS, and Camo Studio on iPadOS (App Store ID 6450313385) demonstrates the two-camera USB-hub use case is legitimate and valuable for spatial-video/hybrid-capture workflows on Vision Pro.
Steps to reproduce
- Connect a powered USB-C hub to Apple Vision Pro with two UVC webcams attached.
- Build a visionOS app that uses
AVCaptureDevice.DiscoverySession(deviceTypes: [.external], …). - Observe: both cameras are discovered and enumerate as distinct
AVCaptureDevices. - Attempt A — two independent sessions: Create two independent
AVCaptureSessions, each with oneAVCaptureDeviceInputand oneAVCaptureVideoDataOutput, start both.- Result: only one session delivers sample buffers. The other stalls silently with no error and no interruption notification.
- Attempt B —
AVCaptureMultiCamSessionwith manual connections (the pattern that works on iPadOS 18+):- Result: code does not compile. In
XROS26.4.sdk:AVCaptureInputPortisAPI_UNAVAILABLE(visionos)(AVCaptureInput.h)AVCaptureInput.portsisAPI_UNAVAILABLE(visionos)AVCaptureDeviceInput.portsWithMediaType:sourceDeviceType:sourceDevicePosition:isAPI_UNAVAILABLE(macos, visionos)- Therefore
AVCaptureConnection(inputPorts:output:)cannot be constructed.
AVCaptureMultiCamSessionitself is declaredAPI_AVAILABLE(… visionos(2.1)), which is misleading because without input-port access the manual-connection path the class requires is unreachable.
- Result: code does not compile. In
Expected behavior
Either of the following would resolve this, in order of preference:
- Expose the missing API surface on visionOS. Make
AVCaptureInputPort,AVCaptureInput.ports, andAVCaptureDeviceInput.portsWithMediaType:sourceDeviceType:sourceDevicePosition:available on visionOS so the documented iPadOS multi-cam pattern compiles and runs.AVCaptureMultiCamSessionis already declared available — the supporting API surface should match. - Allow two concurrent plain
AVCaptureSessions to each own a distinct externalAVCaptureDevice. Each session binds a different hardware device, and the current serialization appears to be a software policy rather than a hardware constraint (a powered hub has bandwidth for both). - Document the limit explicitly and surface a clear error or interruption reason on the stalled session so apps can fail loudly instead of appearing to work.
Actual behavior
AVCaptureMultiCamSessionadvertisesvisionos(2.1)availability but the APIs required to wire its connections are marked unavailable on visionOS.- Two concurrent
AVCaptureSessions silently deliver frames to only one session; no error is reported on the other. - There is no public alternative framework on visionOS for raw UVC access to work around this:
IOUSBHost.framework— not present inXROS26.4.sdkDriverKit— not present inXROS26.4.sdkIOKit— ships a stub (IOKit.tbd); no public USB device interfacesCoreMediaIO— headers are anapinotesstub on visionOSExternalAccessory— MFi-only; generic UVC devices don't enumerate
This means there is no public path, AVFoundation or otherwise, for a third-party visionOS app to display two UVC cameras at once.
Impact / use cases
Apple Vision Pro is uniquely suited to multi-camera monitoring and capture workflows — spatial creators, broadcast/AV producers, multi-angle reference during immersive authoring, clinical and field-recording use cases, and apps that combine a primary UVC cinema camera with a secondary UVC reference/overview angle. iPadOS already supports this via AVCaptureMultiCamSession (demonstrated shipping by Camo Studio). The current visionOS limitation pushes these workflows back to iPad or macOS and undermines Vision Pro's positioning as a pro capture/monitor environment.
References
- iPadOS reference implementation: Apple sample Displaying Video From Connected Devices +
AVCaptureMultiCamSessionwith manualAVCaptureConnectionwiring — works on iPadOS 18+ with two UVC cameras via a powered hub. - Shipping precedent: Camo Studio — two simultaneous UVC cameras via USB hub on iPad — https://apps.apple.com/us/app/camo-studio-stream-record/id6450313385
- visionOS 26.4 SDK headers cited above (
AVCaptureInput.h,AVCaptureSession.h).