制作视频时显示录制计时器

时间:2014-03-06 10:34:32

标签: ios objective-c avcapturedevice avcam

我已经实现了AVCaptureSession的概念来录制视频。

-(void)startRecordingWithOrientation:(AVCaptureVideoOrientation)videoOrientation 
{

    AVCaptureConnection *videoConnection = [AVCamUtilities   
                                           connectionWithMediaType:AVMediaTypeVideo  
                                           fromConnections:[[self movieFileOutput] connections]];
    if ([videoConnection isVideoOrientationSupported])
        [videoConnection setVideoOrientation:videoOrientation];

    [[self movieFileOutput] startRecordingToOutputFileURL:[self outputFileURL]  
    recordingDelegate:self];
 } 

正在录制视频,但屏幕上没有录制计时器。任何人都知道如何在制作视频时显示计时器。

提前致谢。

3 个答案:

答案 0 :(得分:8)

我使用UILabel添加一个UILabel到视频,在录制的同时显示视频,我使用此代码显示录制时间

@property (weak, nonatomic) IBOutlet UILabel *labelTime;

@property(nonatomic, strong) NSTimer *timer;
@property(nonatomic) int timeSec;
@property(nonatomic) int timeMin;

//开始录制的方法

- (void)startRecord {
    self.timeMin = 0;
    self.timeSec = 0;

    //String format 00:00
    NSString* timeNow = [NSString stringWithFormat:@"%02d:%02d", self.timeMin, self.timeSec];
    //Display on your label
    //[timeLabel setStringValue:timeNow];
    self.labelTime.text= timeNow;

    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(timerTick:) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];

    //Start recording
    [movieFileOutput startRecordingToOutputFileURL:outputURL recordingDelegate:self];

}


//Event called every time the NSTimer ticks.
- (void)timerTick:(NSTimer *)timer {
    self.timeSec++;
    if (self.timeSec == 60)
    {
        self.timeSec = 0;
        self.timeMin++;
    }
    //String format 00:00
    NSString* timeNow = [NSString stringWithFormat:@"%02d:%02d", self.timeMin, self.timeSec];
    //Display on your label
    self.labelTime.text= timeNow;
}

答案 1 :(得分:3)

@Fran Martin接受的答案很棒!

由于我在 Swift 中使用它,我花了大约一个小时来找出正确的Timer()函数。为了帮助下一个不熟悉Objective C的人,这是接受答案的 Swift 版本,并带有一些额外的函数invalidate计时器,将计时器重置回{{1何时在00:00中使用它,何时在viewWillAppear中使用

您应invalidateinvalidate

viewWillDisappear计时器

我遇到了一个无法预料的问题,即使我停止运行计时器仍在运行,我发现这个SO Answer表示你必须在再次启动之前停止它并且当你宣布计时器使用时{{1} }

viewDidDisappear

答案 2 :(得分:0)

记住开始录制时的时间(NSTimeInterval),将其保存在实例变量中,然后计算每秒触发两次左右的计时器中当前时间(NSDate timeIntervalSinceReferenceDate)的差异,并显示结果时间。一个UITextView?

为避免漂移,请在每次显示后在计时器上设置“开火时间”,并将其设置为下一整秒(或半秒或常常)离开的时间。这样,如果是显示时间需要0.1秒,下一次开火时间更可能是一整秒左右。