CameraManager icon indicating copy to clipboard operation
CameraManager copied to clipboard

Multiple audio/video AVCaptureInputs are not currently supported

Open pablogupi opened this issue 4 years ago • 6 comments

Hi! I have encountered this random error in version 5.1.3 . I try to change continuously and it works perfectly. Can you think of a way to replicate it to try to correct it? Thank you very much

Fatal Exception: NSInvalidArgumentException 0 CoreFoundation 0x18cf7c360 (Falta) 1 libobjc.A.dylib 0x18cc9f090 (Falta) 2 AVFCapture 0x1cc21b7a0 (Falta) 3 CameraManager 0x102e16fb4 CameraManager.setupOutputMode(:oldCameraOutputMode:) + 1613 (CameraManager.swift:1613) https://github.com/imaginary-cloud/CameraManager/blob/660d7b8326f43ab1721620cd4729b3928c8a767b/Sources/CameraManager.swift#L1613 4 CameraManager 0x102e244a4 partial apply for closure 1 in CameraManager.setupCamera(:) + 1634 (CameraManager.swift:1634)https://github.com/imaginary-cloud/CameraManager/blob/660d7b8326f43ab1721620cd4729b3928c8a767b/Sources/CameraManager.swift#L1634 5 CameraManager 0x102e1065c thunk for @escaping @callee_guaranteed () -> () () 6 libdispatch.dylib 0x18cc3b578 (Falta) 7 libdispatch.dylib 0x18cc3c560 (Falta) 8 libdispatch.dylib 0x18cbe557c (Falta) 9 libdispatch.dylib 0x18cbe6058 (Falta) 10 libdispatch.dylib 0x18cbefaf0 (Falta) 11 libsystem_pthread.dylib 0x18cc935a4 (Falta) 12 libsystem_pthread.dylib 0x18cc96874 (Falta)

pablogupi avatar Sep 09 '20 07:09 pablogupi

@pablogupi

can you share your CameraManager setup? It would help me replicate the issue.

torrao avatar Sep 14 '20 13:09 torrao

Yes, this is my code relationated :

 fileprivate func setupCameraManager() {
        
        self.restoreView();
        
        cameraManager.shouldEnableExposure = true
        cameraManager.shouldRespondToOrientationChanges=true
        cameraManager.writeFilesToPhoneLibrary = false
        
        cameraManager.shouldFlipFrontCameraImage = false
        cameraManager.showAccessPermissionPopupAutomatically = false
        cameraManager.cameraOutputQuality = .high
        cameraManager.shouldKeepViewAtOrientationChanges=false
  
    }

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
      super.willTransition(to: newCollection, with: coordinator)

if windowInterfaceOrientation.isLandscape {
              self.restoreView()
              self.addCameraToView()
              self.cameraManager.resetOrientation()
          } else {
              self.restoreView()
              self.addCameraToView()
              self.cameraManager.resetOrientation()
              
          }
}
 fileprivate func addCameraToView() {
        cameraManager.addPreviewLayerToView(previewView, newCameraOutputMode: CameraOutputMode.videoWithMic)

    
        cameraManager.showErrorBlock = { [weak self] (erTitle: String, erMessage: String) -> Void in
            
            let alertController = UIAlertController(title: erTitle, message: erMessage, preferredStyle: .alert)
            alertController.addAction(UIAlertAction(title: "btn_ok".localized, style: UIAlertAction.Style.default, handler: { (_) -> Void in }))
            
            self?.present(alertController, animated: true, completion: nil)
        }


}

    @objc func changeCameraDevice() {
        cameraManager.cameraDevice = cameraManager.cameraDevice == CameraDevice.back ? CameraDevice.front : CameraDevice.back
        
    } `

That's it. Thanks

pablogupi avatar Sep 14 '20 13:09 pablogupi

@pablogupi

thanks for the code. Looking into your willTransition method:

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
      super.willTransition(to: newCollection, with: coordinator)

if windowInterfaceOrientation.isLandscape {
              self.restoreView()
              self.addCameraToView()
              self.cameraManager.resetOrientation()
          } else {
              self.restoreView()
              self.addCameraToView()
              self.cameraManager.resetOrientation()
              
          }
}

it appears you are calling self.addCameraToView() every-time the collection is changed, is that correct? If so, you should call that only once, otherwise you would be calling cameraManager.addPreviewLayerToView(previewView, newCameraOutputMode: CameraOutputMode.videoWithMic) more than once.

Let me know if that was the case.

torrao avatar Sep 16 '20 15:09 torrao

Thanks for your response @torrao This is because I need the when the screen rotates, the camera also. If I deactivate that code and leave it like that, when I turn the screen the camera appears only in half screen.

override func willTransition(to newCollection: UITraitCollection, with coordinator: UIViewControllerTransitionCoordinator) {
        super.willTransition(to: newCollection, with: coordinator)
        
        coordinator.animate(alongsideTransition: { (context) in
            guard let windowInterfaceOrientation = self.windowInterfaceOrientation else { return }
            self.view.willRemoveSubview(self.previewView)
            
            self.cameraManager.resetOrientation()

        })
    }

IMG_6479 IMG_6480

pablogupi avatar Sep 17 '20 15:09 pablogupi

@pablogupi

spent some time trying to replicate your issue with the code you provided and I was unable to trigger the error.

torrao avatar Sep 23 '20 09:09 torrao

Hi! Apparently when I have the camera in .videoOnly mode it works fine. At the moment the error does not appear: "Multiple audio / video AVCaptureInputs are not currently supported". Only occurs in videoWithMic mode

pablogupi avatar Oct 07 '20 17:10 pablogupi