如何设置 10 秒的视频录制限制并实时删除 10 秒的旧电影部分 - Swift iOS
Posted
技术标签:
【中文标题】如何设置 10 秒的视频录制限制并实时删除 10 秒的旧电影部分 - Swift iOS【英文标题】:How to set a 10 second limit to video recording and in real time remove the 10 seconds old film parts - Swift iOS 【发布时间】:2014-12-26 22:43:32 【问题描述】:如果标题真的令人困惑,我可以理解,但我会尽力解释得更详细!我有一个 ios Swift 应用程序的计划,它将录制一个时间限制为 10 秒的视频。但是当剪辑达到 10 秒时,它不应该停止录制。它应该删除剪辑的末端,因此它永远不会超过 10 秒。所以它不会占用太多内存。当有人按下“停止录制按钮”时,它会将其保存到相机胶卷中。
我在网上搜索过类似的东西,但没有找到任何有用的东西。你知道一个好的教程甚至源代码吗?
//提前感谢安东
【问题讨论】:
***.com/questions/17048425/cutting-video-on-iphone 那是Objective-C,我没有翻译代码的技能@MidhunMP 你能检查一下这个吗:***.com/questions/27660975/… 【参考方案1】:使用属性:
videoMaximumDuration
【讨论】:
文件大小限制有什么属性吗? @Sudhakar 在 AVCaptureFileOutput 中有 maxRecordedFileSize【参考方案2】:你有一个有点令人困惑的问题。您不想停止录制,但只想删除剪辑的结尾?为什么不在 10 秒后停止录制?
您可以使用 dispatch_time 停止,对我有用:
func captureOutput(captureOutput: AVCaptureFileOutput!, didStartRecordingToOutputFileAtURL fileURL: NSURL!, fromConnections connections: [AnyObject]!)
captureOutput.maxRecordedDuration = CMTimeMake(10, 1)
/* After 10 seconds, let's stop the recording process */
let delayInSeconds = 10.0
let delayInNanoSeconds = dispatch_time(DISPATCH_TIME_NOW, Int64(delayInSeconds * Double(NSEC_PER_SEC)))
dispatch_after(delayInNanoSeconds, dispatch_get_main_queue(),
captureOutput.stopRecording()
)
return
【讨论】:
【参考方案3】:如果使用AVFoundation
录制,应在将AVCaptureMovieFileOutput
添加到AVCaptureSession
时设置最长录制时长。
private let session = AVCaptureSession()
private let movieOutput = AVCaptureMovieFileOutput()
movieOutput.maxRecordedDuration = CMTime(seconds: 10, preferredTimescale: 600)
if session.canAddOutput(movieOutput)
session.addOutput(movieOutput)
在达到最长录制持续时间后,fileOutput(didFinishRecordingTo:from:error:)
将被调用,您的视频将保存到指定的 URL,持续时间低于最大值几毫秒。请注意,error 不会为 nil。
【讨论】:
以上是关于如何设置 10 秒的视频录制限制并实时删除 10 秒的旧电影部分 - Swift iOS的主要内容,如果未能解决你的问题,请参考以下文章