Swift Swfit,AVFoundation开始记录isRecording何时为真
我想录制一段长视频,在录制过程中将它分成几个部分,在不同的路径上持续几秒钟(如instagram故事) 我尝试停止录制并再次开始录制,但开发人员文档说,我有错误或丢失了部分视频(在停止录制和再次开始录制之间) 当他们想要停止记录新样本时,可以调用此方法 复制到当前文件,并且不希望继续录制到其他文件 文件如果要从一个文件切换到另一个文件,则不应 调用此方法。相反,你应该直接打电话 使用新文件URL开始记录(收件人:recordingDelegate:) 但是,当我第二次调用startRecording()时(isRecording==true),委托调用了Swift Swfit,AVFoundation开始记录isRecording何时为真,swift,avfoundation,Swift,Avfoundation,我想录制一段长视频,在录制过程中将它分成几个部分,在不同的路径上持续几秒钟(如instagram故事) 我尝试停止录制并再次开始录制,但开发人员文档说,我有错误或丢失了部分视频(在停止录制和再次开始录制之间) 当他们想要停止记录新样本时,可以调用此方法 复制到当前文件,并且不希望继续录制到其他文件 文件如果要从一个文件切换到另一个文件,则不应 调用此方法。相反,你应该直接打电话 使用新文件URL开始记录(收件人:recordingDelegate:) 但是,当我第二次调用startRecordi
func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {}
错误是
错误域=AVFoundationErrorDomain代码=-11859“电影录制
无法启动“UserInfo={NSLocalizedDescription=电影录制”
无法启动,NSUnderlyingError=0x281efcc00{错误
域=NSOSStatusErrorDomain代码=-16419“(空)”},
nsLocalizedRecoverysSuggestion=停止正在录制的电影,然后
重试,.NSLocalizedFailureReason=电影录制已在播放中
进展}
我这样解决了我的问题 我做了一面旗子
var isRecordong: Bool = false
在我的启动操作中,在开始录制之后,我将标志更改为true并启动计时器
@IBAction func startRecording() {
movieOutput.startRecording(to: outputURL, recordingDelegate: self)
isRecording = true
timer = Timer.scheduledTimer(withTimeInterval: duration, repeats: true, block: { [weak self] ( _ ) in
guard let weakSelf = self else { return }
if weakSelf.movieOutput.isRecording == true {
weakSelf.movieOutput.stopRecording()
}
})
}
接下来,我实现了委托方法didfinishRecording,用于生成循环记录
func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {
if self.isRecording {
movieOutput.startRecording(to: newOutputURL, recordingDelegate: self)
} else {
//perform action after recording
}
}
在停止操作中,我停止录制,将标志更改为false并删除计时器
@IBAction func stopRecording() {
isRecording = false
if movieOutput.isRecording == true {
movieOutput.stopRecording()
} else {
//perform action after recording, if action and timer will work simultaneously
}
timer.invalidate()
}
一些要点
- 在开始和停止录制之间有一点延迟(即,此间隔未录制),但大约为0.1秒,这对我很合适李>
- 第一个文件比文件的其余部分和持续时间短0.1–0.3秒,这是由于计时器造成的。此外,每个文件的持续时间将与计时器相差十分之几秒