Как заморозить вид, пока определенное значение не станет истинным? - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть приложение, в котором пользователь может удерживать кнопку, чтобы снять видео.Однако когда они делают это, а затем отпускают, новый слой с воспроизведением видео не появляется мгновенно.Вместо этого есть очень короткая задержка, когда вы можете видеть, что камера все еще показывает то, что видит камера после того, как пользователь отпустил кнопку.Когда задержка заканчивается, видео мгновенно появляется и начинает воспроизводиться.Как я могу вместо этого сделать первый кадр видео до того, как он будет готов к воспроизведению, чтобы он оставался там только на мгновение, прежде чем он начнет воспроизводиться?Посмотрите функциональность захвата видео, чтобы понять, что я имею в видуэто

Ниже мой код:

        func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {

            if (error != nil) {
                print("Error recording movie11: \(error!.localizedDescription)")
            } else {
                newViewVideoPlayback()

                switchIcon.isHidden = true
                switchWhiteUI.isHidden = true
                switchCamButton.isHidden = true
                camWhiteLine.isHidden = true

                let videoRecorded = outputURL! as URL

                playerQueue = AVQueuePlayer(playerItem: AVPlayerItem(url: videoRecorded))
                self.playerQueue?.play()

                playerLayer = AVPlayerLayer(player: playerQueue)
                playerLayer.frame = (camPreview?.bounds)!
                playerLayer?.layoutIfNeeded()
                playerLayer.videoGravity = AVLayerVideoGravity.resizeAspectFill

                camPreview?.layer.insertSublayer(playerLayer, above: previewLayer)

                playerItem1 = AVPlayerItem(url: videoRecorded)

                playerLooper = AVPlayerLooper(player: playerQueue, templateItem: playerItem1)

                if !captureSession.isRunning {
                    DispatchQueue.global(qos: .background).async {
                        self.startRunningCaptureSession()
                    }
                }
            }
        }


//Bellow is teh long tap method 
        @objc func longTap(_ sender: UIGestureRecognizer) {
        print("Long tap")

        self.numForVid = numForVid + 1 //shud change this number stuff
        print("\(numForVid)")

        cameraButton.isHidden = true

        if sender.state == .ended {
            print("UIGestureRecognizerStateEnded")
            //stopSession()
            stopRecording()
        }
        else if sender.state == .began {
            print("UIGestureRecognizerStateBegan.")
            //Do Whatever You want on Began of Gesture
            startCapture()
        }
    }

1 Ответ

0 голосов
/ 07 декабря 2018

Вставьте captureSession.stopRunning() в конце функции stopRecording ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...