如何在录制时在屏幕上显示AVCaptureMovieFileOutput的当前长度?

时间:2016-07-18 18:33:02

标签: swift video time avfoundation recording

正如标题所说,我希望在用户使用AVFoundation录制视频时显示当前的录制长度。我已经用AVAudioRecorder做了类似的事情,在那里我创建了一个定时器,用于设置标签的文本如下:

recordDurationLabel.text = timeString((audioRecorder?.currentTime)!)

我想知道是否有" currentTime"录制视频的功能?我唯一的另一个想法是在captureOutput:didStartRecordingToOutputFileAtURL函数中启动重复的1秒计时器,但我想确保准确性。

提前致谢!

编辑: 现在这是我在captureOutput:didStartRecordingToOutputFileAtURL委托方法中实现的功能,但同样,与视频直接相关的东西会更清晰。

func startRecordingUpdateTimer() {

    recordingUpdateTimer = NSTimer(timeInterval: 1.0/45.0, target: self, selector: #selector(recordedVideo), userInfo: nil, repeats: true)
    NSRunLoop.mainRunLoop().addTimer(recordingUpdateTimer!, forMode: NSRunLoopCommonModes)
}

func recordedVideo() {
    durationTime = durationTime + 1.0/45.0
    let durationString = timeString(durationTime)
    recordDurationLabel.text =  durationString
}

1 个答案:

答案 0 :(得分:0)

使用AVCaptureMovieFileOutput,您可以使用只读的recordedDuration获取电影的持续时间,并在录制开始时返回CMTime。请参阅AVCaptureFileOutput

如果您使用captureOutput:didOutputSampleBuffer:fromConnection:,则会收到包含CMSampleBuffer CMTime的{​​{1}}个对象,您可以使用CMSampleBufferGetPresentationTimeStamp进行访问。

执行像CMTimeSubstract这样的CMTime操作,可以计算当前缓冲区与您记录的第一个缓冲区之间的时差。

如果您从未操作过sampleBuffers,那么您应该看一下Apple的示例代码:RosyWriter