I'm building an app that lets you preview multiple external USB cameras simultaneously. I got it to work, but with up to only 3 cameras.
Note that if I only select .external, the 3rd external camera does not stream anything, and the rest of them fail canAddInput.
captureSession.beginConfiguration()
let inputs = AVCaptureDevice.DiscoverySession(
deviceTypes: [.builtInWideAngleCamera, .external],
mediaType: .video,
position: .unspecified
)
.devices
.compactMap{ try? AVCaptureDeviceInput(device: $0) }
for input in inputs {
if !captureSession.canAddInput(input) {
print("Failed to add camera \(input.device.localizedName)")
continue
}
captureSession.addInput(input)
let layer = AVCaptureVideoPreviewLayer(sessionWithNoConnection: captureSession)
guard let port = input.ports.first else { continue }
let connection = AVCaptureConnection(inputPort: port, videoPreviewLayer: layer)
if !captureSession.canAddConnection(connection) { continue }
captureSession.addConnection(connection)
cameraLayers.append(layer)
}
captureSession.commitConfiguration()
Tested on iPad Pro with M2