Swift 如何在录制时获取AVCaptureMovieFileOutput的当前长度以显示在屏幕上?
正如标题所说,我希望在用户使用AVFoundation录制视频时显示当前的录制长度。我在AVAudioRecorder上做了类似的事情,我创建了一个计时器,用于设置标签的文本,如下所示:Swift 如何在录制时获取AVCaptureMovieFileOutput的当前长度以显示在屏幕上?,swift,video,time,avfoundation,recording,Swift,Video,Time,Avfoundation,Recording,正如标题所说,我希望在用户使用AVFoundation录制视频时显示当前的录制长度。我在AVAudioRecorder上做了类似的事情,我创建了一个计时器,用于设置标签的文本,如下所示: recordDurationLabel.text=timeString((audioRecorder?.currentTime)!) 我想知道是否有“当前时间”功能用于录制视频?我唯一的另一个想法是在captureOutput中启动一个重复的1秒计时器:DidStartRecordingToOutputFile
recordDurationLabel.text=timeString((audioRecorder?.currentTime)!)
我想知道是否有“当前时间”功能用于录制视频?我唯一的另一个想法是在captureOutput中启动一个重复的1秒计时器:DidStartRecordingToOutputFileAttribute函数,但我想确保准确性
提前谢谢
编辑:
现在,这是我在captureOutput中实现的函数:didStartRecordingToOutputFileAttural委托方法,但同样,如果有与视频直接相关的内容,会更干净
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
}
使用
AVCaptureMovieFileOutput
,您可以使用recordedDuration
获取电影的持续时间,它是只读的,并在开始录制时返回CMTime。看
如果使用captureOutput:didOutputSampleBuffer:fromConnection:
您将收到CMSampleBuffer
对象,这些对象包含CMTime
,您可以使用CMSampleBufferGetPresentationTimeStamp
访问
执行类似于CMTimeSubstract
的CMTime操作将允许您计算当前缓冲区与记录的第一个缓冲区之间的时间差
如果您从未操作过sampleBuffers,那么您应该看看Apple提供的示例代码:使用
AVCaptureMovieFileOutput
,您可以使用recordedDuration
获取电影的持续时间,它是只读的,并在开始录制时返回CMTime。看
如果使用captureOutput:didOutputSampleBuffer:fromConnection:
您将收到CMSampleBuffer
对象,这些对象包含CMTime
,您可以使用CMSampleBufferGetPresentationTimeStamp
访问
执行类似于CMTimeSubstract
的CMTime操作将允许您计算当前缓冲区与记录的第一个缓冲区之间的时间差
如果您从未操作过sampleBuffers,那么您应该看看Apple的以下示例代码:谢谢,我希望避免使用AVCaptureVideoDataOutput,但似乎这将是一种方法。糟糕的是,我很少使用MovieFileOutput。我查看了文档,只需保留对输出的引用,并使用
recordedDuration
访问持续时间。编辑答案谢谢,我希望避免使用AVCaptureVideoDataOutput,但似乎这就是当时的做法。我的缺点是,我很少使用MovieFileOutput。我查看了文档,只需保留对输出的引用,并使用recordedDuration
访问持续时间。编辑了答案