iOS camera freezes when previewing video when there is a camera overlay
Asked Answered
A

0

8

I am attempting to overlay a view over a video capture session in UIImagePicker. The overlay works fine but when the app gets to the screen where the user can "retake", "play" or "use video", the app crashes and gives the error:

2017-04-16 21:33:04.129212-0400 ChugMug[429:59833] libMobileGestalt MobileGestalt.c:2690: statfs(/mnt4): No such file or directory 2017-04-16 21:33:04.129871-0400 ChugMug[429:59833] libMobileGestalt MobileGestalt.c:2587: SInt64 NANDSize(): No kIOMediaSizeKey found for disk0! 2017-04-16 21:33:09.352085-0400 ChugMug[429:60065] [MediaRemote] Error Operation requires a client callback to have been registered. requesting playback queue

The code is quite simple, when the overlay is commented out, the video preview screen and buttons work fine, but when the overlay is present the app freezes at the following screen: enter image description here

Here is the code for the camera and the overlay:

func startMediaBrowserFromViewController(viewController: UIViewController, usingDelegate delegate: UINavigationControllerDelegate & UIImagePickerControllerDelegate) -> Bool {
    // 1
    if UIImagePickerController.isSourceTypeAvailable(.savedPhotosAlbum) == false {
        return false
    }

    // 2
    let mediaUI = UIImagePickerController()
    mediaUI.sourceType = .savedPhotosAlbum
    mediaUI.mediaTypes = [kUTTypeMovie as NSString as String]
    mediaUI.allowsEditing = true
    mediaUI.delegate = delegate

    // 3
    present(mediaUI, animated: true, completion: nil)
    return true
}

func startCameraFromViewController(viewController: UIViewController, withDelegate delegate: UIImagePickerControllerDelegate & UINavigationControllerDelegate) -> Bool {

    if UIImagePickerController.isSourceTypeAvailable(.camera) == false {
        return false
    }


    cameraController.sourceType = .camera
    cameraController.mediaTypes = [kUTTypeMovie as NSString as String]
    cameraController.allowsEditing = false
    cameraController.delegate = delegate
    cameraController.showsCameraControls = true


    //customView stuff
    let customViewController = CustomOverlayViewController(
        nibName:"CustomOverlayViewController",
       bundle: nil
    )
    let customView = customViewController.view //as! CustomOverlayView
   customView?.frame = cameraController.view.frame

    present(cameraController, animated: true, completion: {
        self.cameraController.cameraOverlayView = customView
        customViewController.cameraLabel.text = "Camera Label"
        self.cameraController.startVideoCapture()
    })

    return true
}

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let mediaType = info[UIImagePickerControllerMediaType] as! NSString
    dismiss(animated: true, completion: nil)

    // Handle a movie capture
    if mediaType == kUTTypeMovie {
        guard let path = (info[UIImagePickerControllerMediaURL] as! NSURL).path else { return }
        if UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(path) {
            UISaveVideoAtPathToSavedPhotosAlbum(path, self, nil, nil)
        }
    }
}

I have no clue what is causing this strange error and cant find anything similar. I hope someone can help me.

Angelikaangelina answered 17/4, 2017 at 1:48 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.