gpt4 book ai didi

ios - AVCaptureMovieFileOutput - 记录顺序视频剪辑

转载 作者:可可西里 更新时间:2023-11-01 02:18:57 27 4
gpt4 key购买 nike

我想在一系列流畅、可变长度的剪辑中录制视频/音频。也就是说,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 捕获连续视频剪辑?

最佳答案

我们来了!!!所以,这是一个没有多少人处理的话题,所以让我给你一些帮助。

当您录制时,您有一个 session 和一个输出

如果你阅读 apple 的委托(delegate)方法文档,你会看到

    startRecordingToOutputFileURL

那仍然会触发

    didFinishRecordingToOutputFileAtURL

问题是您需要更新输出并从 session 中添加/删除它。

所以对于 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)方法(委托(delegate)方法!!!)

    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);
}
}

这个想法是你必须这样做,因为如果你停止记录,你需要创建一个新的 session ,然后是一个新的输出。这样你只需要创建一个新的输出。

如果这需要任何编辑或调整但它对我有用,请告诉我。

关于ios - AVCaptureMovieFileOutput - 记录顺序视频剪辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32803219/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com