ios – AVCaptureSession digital camera preview freezes on a single body as a substitute of displaying stay video

0
1
ios – AVCaptureSession digital camera preview freezes on a single body as a substitute of displaying stay video


The digital camera preview freezes on a single body (a black/partially rendered picture), and the stay digital camera feed by no means begins. The UI stays responsive, however the AVCaptureSession doesn’t correctly ship frames after initialization. Primarily, the preview layer is displaying a stale or frozen body as a substitute of stay video.

 func startReceivingUpdates() {
        videoFrameService.delegate = self
        cameraService.delegate = self
    }
    
    func stopReceivingUpdates() {
        videoFrameService.delegate = nil
        cameraService.delegate = nil
    }

these are referred to as on the onAppear and onDisappear of the view respectively

non-public func configureCaptureSession() {
        guard standing == .unconfigured else {
            return
        }

        session.beginConfiguration()

        defer {
            session.commitConfiguration()
        }

        for enter in session.inputs {
            session.removeInput(enter)
        }

        let system = AVCaptureDevice.default(
            .builtInWideAngleCamera,
            for: .video,
            place: cameraPosition)

        guard let digital camera = system else {
            set(error: .cameraUnavailable)
            standing = .failed
            return
        }

        do {
            let cameraInput = attempt AVCaptureDeviceInput(system: digital camera)

            if session.canAddInput(cameraInput) {
                session.addInput(cameraInput)
            } else {
                set(error: .cannotAddInput)
                standing = .failed
                return
            }

            if let audioCaptureDevice = audioCaptureDevice {
                let audioInput = attempt AVCaptureDeviceInput(system: audioCaptureDevice)

                if session.canAddInput(audioInput) {
                    session.addInput(audioInput)
                }
            }
        } catch {
            set(error: .createCaptureInput(error))
            standing = .failed
            return
        }

        session.outputs.forEach { output in
            session.removeOutput(output)
        }

        if session.canAddOutput(videoOutput) {
            session.addOutput(videoOutput)

            videoOutput.videoSettings =
            [kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA]

            let videoConnection = videoOutput.connection(with: .video)
            videoConnection?.videoOrientation = .portrait
            videoConnection?.isVideoMirrored = cameraPosition == .entrance
        } else {
            set(error: .cannotAddOutput)
            standing = .failed
            return
        }

        if session.canAddOutput(audioOutput) {
            session.addOutput(audioOutput)
        }

        if session.canAddOutput(photoOutput) {
            session.addOutput(photoOutput)

            let outputConnection = photoOutput.connection(with: .video)
            if cameraPosition == .entrance {
                outputConnection?.automaticallyAdjustsVideoMirroring = false
                outputConnection?.isVideoMirrored = true
            } else {
                outputConnection?.automaticallyAdjustsVideoMirroring = false
                outputConnection?.isVideoMirrored = false
            }
        }

        standing = .configured
    }


extension VideoFrameService: AVCaptureVideoDataOutputSampleBufferDelegate, AVCaptureAudioDataOutputSampleBufferDelegate {
    func captureOutput(
        _ output: AVCaptureOutput,
        didOutput sampleBuffer: CMSampleBuffer,
        from connection: AVCaptureConnection
    ) {
        DispatchQueue.major.async {
            self.delegate?.replace(output: output, sampleBuffer: sampleBuffer)
        }
    }
}

Click on to see the picture

what would be the root trigger for this. and find out how to remedy this

LEAVE A REPLY

Please enter your comment!
Please enter your name here