如何设置 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的主要内容,如果未能解决你的问题,请参考以下文章

在android中反转视频

WIN10平板如何录制视频,为什么录制屏幕无法播放

如何为录音设置 60 秒的限制

vivo手机在快手上怎么录制60秒

如何响应 UIImagePickerController 生成的 UIAlertView

iOS 视频分块录制