fix: avoid screen recorder data races
parent
65478a6ff3
commit
c14d738d37
|
|
@ -50,11 +50,6 @@ final class ScreenRecordService {
|
|||
}()
|
||||
try? FileManager.default.removeItem(at: outURL)
|
||||
|
||||
let recorder = RPScreenRecorder.shared()
|
||||
await MainActor.run {
|
||||
recorder.isMicrophoneEnabled = includeAudio
|
||||
}
|
||||
|
||||
var writer: AVAssetWriter?
|
||||
var videoInput: AVAssetWriterInput?
|
||||
var audioInput: AVAssetWriterInput?
|
||||
|
|
@ -77,8 +72,7 @@ final class ScreenRecordService {
|
|||
}
|
||||
|
||||
try await withCheckedThrowingContinuation { (cont: CheckedContinuation<Void, Error>) in
|
||||
Task { @MainActor in
|
||||
recorder.startCapture(handler: { sample, type, error in
|
||||
let handler: @Sendable (CMSampleBuffer, RPSampleBufferType, Error?) -> Void = { sample, type, error in
|
||||
if let error {
|
||||
setHandlerError(error)
|
||||
return
|
||||
|
|
@ -172,9 +166,16 @@ final class ScreenRecordService {
|
|||
@unknown default:
|
||||
break
|
||||
}
|
||||
}, completionHandler: { error in
|
||||
}
|
||||
|
||||
let completion: @Sendable (Error?) -> Void = { error in
|
||||
if let error { cont.resume(throwing: error) } else { cont.resume() }
|
||||
})
|
||||
}
|
||||
|
||||
Task { @MainActor in
|
||||
let recorder = RPScreenRecorder.shared()
|
||||
recorder.isMicrophoneEnabled = includeAudio
|
||||
recorder.startCapture(handler: handler, completionHandler: completion)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -182,6 +183,7 @@ final class ScreenRecordService {
|
|||
|
||||
let stopError = await withCheckedContinuation { cont in
|
||||
Task { @MainActor in
|
||||
let recorder = RPScreenRecorder.shared()
|
||||
recorder.stopCapture { error in cont.resume(returning: error) }
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue