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