ReplayKit не будет записывать дважды за один сеанс

Я использую ReplayKit в приложении для записи видимого экрана с некоторым текстом и воспроизведением видео. Проблема, с которой я столкнулся, заключается в том, что ReplayKit отлично работает для первой записи экрана, но если мне нужно снова записать в том же сеансе (то есть, не закрывая приложение), он сталкивается с этой ошибкой:

MyViewController[423:39346] viewServiceDidTerminateWithError:: Error Domain=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo={Message=Service Connection Interrupted}

В этом сценарии я фактически пытаюсь отобразить запись на том же ViewController (только при воспроизведении другого видео и изменении некоторого текстового содержимого). Ниже мой код записи:

@objc func startRecording() {
        let recorder = RPScreenRecorder.shared()

        recorder.startRecording{ [unowned self] (error) in
            if let unwrappedError = error {
                print(unwrappedError.localizedDescription)
                print("NOT Recording")
            } else {
                self.video.play()
                print("Recording")
                self.isRecording = true
            }
        }

        recordIcon.isHidden = true
        ring.isHidden = true
    }

    @objc func stopRecording() {
        let recorder = RPScreenRecorder.shared()

        recorder.stopRecording( handler: { previewViewController, error in
            if let error = error {
                print("\(error.localizedDescription)")
            }

            // Handling iPads
            if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.pad {
                previewViewController?.modalPresentationStyle = UIModalPresentationStyle.popover
                previewViewController?.popoverPresentationController?.sourceRect = CGRect.zero
                previewViewController?.popoverPresentationController?.sourceView = self.view
            }
            if previewViewController != nil {
                self.previewViewController = previewViewController
                previewViewController?.previewControllerDelegate = self
            }
            self.present(previewViewController!, animated: true, completion: nil)
        })
        isRecording = false
        recordIcon.isHidden = false
        ring.isHidden = false
        return
    }

    func previewControllerDidFinish(_ previewController: RPPreviewViewController) {
        dismiss(animated: true)
    }

Любая помощь по этому поводу приветствуется. Я бы не хотел заставлять пользователей снова открывать приложение перед повторной записью.


person Coding Hobbies    schedule 09.07.2019    source источник


Ответы (1)


Возможно, ваше приложение хранит запись экрана дольше, чем должно. В этом случае попробуйте реализовать функцию discardRecording(handler: @escaping () -> Void). Вот более подробная информация о discardRecording.

person James Castrejon    schedule 09.07.2019
comment
Спасибо за комментарий. Я попробовал ваше решение, но обнаружил ту же ошибку. Похоже, мне просто придется просить пользователей повторно открывать приложение для каждой новой записи - person Coding Hobbies; 10.07.2019
comment
Без проблем! И последнее, что вы можете попробовать, - это удалить / закомментировать функцию self.video.play() в вашем startRecording() методе. Я не видел этого в руководствах или документации Apple, так что это могло быть так. Вот еще один поток с тем же кодом ошибки, но с другой проблемой. ссылка Кроме того, я надеюсь, вы в этом разобрались ! - person James Castrejon; 10.07.2019
comment
похоже, мне не повезло, но напишу здесь, если найду исправление. fyi, self.video.play () - это мой собственный код, который воспроизводит AVPlayer, поэтому он не имеет отношения к этой проблеме. Спасибо - person Coding Hobbies; 15.07.2019