2016-07-18 73 views
0

正如標題所說,我期待在用戶使用AVFoundation錄製視頻時顯示錄製的當前長度。我已經做了與AVAudioRecorder類似的東西,我創建一個計時器,設置了一個標籤的文字如下:如何在錄製屏幕時顯示AVCaptureMovieFileOutput的當前長度?

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 
} 

回答

0

隨着AVCaptureMovieFileOutput,您可以通過使用recordedDuration這是隻讀的,將返回你CMTime當記錄已經開始得到了電影的持續時間。見AVCaptureFileOutput

如果使用captureOutput:didOutputSampleBuffer:fromConnection:您會收到包含一個CMTime,您可以用CMSampleBufferGetPresentationTimeStamp訪問CMSampleBuffer對象。

通過執行類似CMTimeSubstract的CMTime操作,您可以計算當前緩衝區與第一個緩衝區之間的時間差。

如果你從來沒有操縱sampleBuffers,你應該看看蘋果這個例子代碼:RosyWriter

+0

謝謝,我希望避免AVCaptureVideoDataOutput但看起來這將是做那麼的方式。 –

+0

我的不好,我很少使用MovieFileOutput。我檢查了文檔,只是保留對輸出的引用,並用'recordedDuration'訪問持續時間。編輯答案 – HHK

相關問題