Fix short video recording crash

This commit is contained in:
Ilya Laktyushin 2023-07-01 02:52:37 +02:00
parent 11a284a303
commit 9a3103bc3f
2 changed files with 13 additions and 3 deletions

View File

@ -337,7 +337,7 @@ final class CameraOutput: NSObject {
let outputFileURL = URL(fileURLWithPath: outputFilePath) let outputFileURL = URL(fileURLWithPath: outputFilePath)
let videoRecorder = VideoRecorder(configuration: VideoRecorder.Configuration(videoSettings: videoSettings, audioSettings: audioSettings), videoTransform: CGAffineTransform(rotationAngle: .pi / 2.0), fileUrl: outputFileURL, completion: { [weak self] result in let videoRecorder = VideoRecorder(configuration: VideoRecorder.Configuration(videoSettings: videoSettings, audioSettings: audioSettings), videoTransform: CGAffineTransform(rotationAngle: .pi / 2.0), fileUrl: outputFileURL, completion: { [weak self] result in
if case let .success(transitionImage, duration, positionChangeTimestamps) = result { if case let .success(transitionImage, duration, positionChangeTimestamps) = result {
self?.recordingCompletionPipe.putNext(.finished((outputFilePath, transitionImage!, false), nil, duration, positionChangeTimestamps.map { ($0 == .front, $1) }, CACurrentMediaTime())) self?.recordingCompletionPipe.putNext(.finished((outputFilePath, transitionImage ?? UIImage(), false), nil, duration, positionChangeTimestamps.map { ($0 == .front, $1) }, CACurrentMediaTime()))
} else { } else {
self?.recordingCompletionPipe.putNext(.failed) self?.recordingCompletionPipe.putNext(.failed)
} }
@ -363,7 +363,10 @@ final class CameraOutput: NSObject {
} }
func stopRecording() -> Signal<VideoCaptureResult, NoError> { func stopRecording() -> Signal<VideoCaptureResult, NoError> {
self.videoRecorder?.stop() guard let videoRecorder = self.videoRecorder, videoRecorder.isRecording else {
return .complete()
}
videoRecorder.stop()
return self.recordingCompletionPipe.signal() return self.recordingCompletionPipe.signal()
|> take(1) |> take(1)

View File

@ -291,7 +291,14 @@ private final class VideoRecorderImpl {
public func stopRecording() { public func stopRecording() {
self.queue.async { self.queue.async {
self.recordingStopSampleTime = CMTime(seconds: CACurrentMediaTime(), preferredTimescale: CMTimeScale(NSEC_PER_SEC)) var stopTime = CMTime(seconds: CACurrentMediaTime(), preferredTimescale: CMTimeScale(NSEC_PER_SEC))
if self.recordingStartSampleTime.isValid {
if (stopTime - self.recordingStartSampleTime).seconds < 1.0 {
stopTime = self.recordingStartSampleTime + CMTime(seconds: 1.0, preferredTimescale: self.recordingStartSampleTime.timescale)
}
}
self.recordingStopSampleTime = stopTime
} }
} }