Avcapturessession.stoprunning () не может быть вызвана между призывами к Beginconfiguration и Commitconfiguration (iPhonIOS

Программируем под IOS
Ответить
Anonymous
 Avcapturessession.stoprunning () не может быть вызвана между призывами к Beginconfiguration и Commitconfiguration (iPhon

Сообщение Anonymous »

Таким образом, на основе Crashlytics Firebase. Следующий сбой происходит только для устройств iPhone 7 и iPhone 7 Plus. < /p>
Я также проверил приложение на старых устройствах - iPhone 6s, iPhone 7 и iPhone 11 и я не смог воспроизвести эту проблему.Fatal Exception: NSGenericException
*** -[AVCaptureSession stopRunning] stopRunning may not be called between calls to beginConfiguration and commitConfiguration

MainViewModel.swift - Line 598
closure #1 in MainViewModel.stopCaptureSession() + 598

Я использую Dispatchqueue для синхронизации, поэтому я не совсем понимаю, что здесь происходит.
MainViewModelФункции , связанные с захватом и Stoprunning , beginconfiguration , commitconfiguration вызовы:
private let sessionQueue = DispatchQueue(label: "sessionQueue")

private func stopCaptureSession() {
sessionQueue.sync {
if captureSession.isRunning {
captureSession.stopRunning()
}

// Remove all inputs
for input in captureSession.inputs {
captureSession.removeInput(input)
}

// Remove all outputs
for output in captureSession.outputs {
captureSession.removeOutput(output)
}

DispatchQueue.main.async {
self.torch = false
self.cameraReady = false
}
}
}

private func setupCaptureSessionConfigurationForRecording() async {
sessionQueue.sync {
captureSession.beginConfiguration()

let videoOutput = AVCaptureVideoDataOutput()

videoOutput.setSampleBufferDelegate(self, queue: videoQueue)

if captureSession.canAddOutput(videoOutput) {
captureSession.addOutput(videoOutput)
if let videoConnection = videoOutput.connection(with: .video), videoConnection.isVideoOrientationSupported {
videoConnection.videoOrientation = orientation
}

self.videoOutput = videoOutput
}

captureSession.commitConfiguration()
}
}

private func removeCaptureSessionConfigurationForRecording() {
sessionQueue.sync {
self.captureSession.beginConfiguration()

if let videoOutput = self.videoOutput {
self.videoQueue.sync {
self.captureSession.removeOutput(videoOutput)
self.videoOutput = nil
}
}

self.captureSession.commitConfiguration()
}
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... nconfigura
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»