我想在一系列流畅的可变长度剪辑中录制视频/音频。也就是说,vid1.mp4后跟vid2.mp4应无缝连接,或者大部分无缝连接。
我目前的问题是,我似乎无法立即切换文件而不会出错。
问题的症结在于:
func recordNewClip() {
let file = self.outputUrl()
let filePath = file!.path!
try? NSFileManager.defaultManager().removeItemAtPath(filePath)
movieOutput!.stopRecording()
movieOutput!.startRecordingToOutputFileURL(file, recordingDelegate: self)
}
如果我不打电话给stopRecording
,我会收到错误,如果我打电话给stopRecording
,则只会记录随机视频片段;大多数录音失败。
如何使用AVFoundation捕获连续视频片段?
答案 0 :(得分:0)
我们去! 所以,这是一个很多人都没有处理的话题,所以让我给你一些帮助。
录制时,您有会话和输出
如果您阅读了委托方法的Apple文档,您将看到
startRecordingToOutputFileURL
那仍然会解雇
didFinishRecordingToOutputFileAtURL
问题是您需要更新输出并在会话中添加/删除它。
因此对于swift - >
....
// Remove old output
session.removeOutput(output);
// Create new output
output = AVCaptureMovieFileOutput()
if session.canAddOutput(output) {
session.addOutput(output)
output.startRecordingToOutputFileURL(fileDest, recordingDelegate: self.delegate)
}
....
这将触发委托方法(DELEGATE METHOD !!!)
func captureOutput(captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: [AnyObject]!, error: NSError!) {
let outputPath = outputFileURL.path!
do {
print(outputPath);
try NSFileManager.defaultManager().removeItemAtPath(outputPath)
} catch _ {
print("error removing file");
}
do {
try NSFileManager.defaultManager().moveItemAtPath(outputFileURL.path!, toPath: outputPath)
} catch _ {
print(error);
}
}
这个想法是你必须这样做,因为如果你停止录制,你需要创建一个新的会话,然后创建一个新的输出。这样您只需要创建一个新输出。
如果需要任何编辑或调整,请告诉我,但它对我有用。