2012-12-03 68 views
11

我正在用AVCaptureSession和AVCaptureMovieFileOutput录制影片。我还记录加速度数据并尝试将加速度数据与视频对齐。AVCaptureSession和AVCaptureMovieFileOutput帧时间戳

我想找出一种方法来获得开始录制视频文件的时间。我做了以下情况:

currentDate = [NSDate date]; 
[output startRecordingToOutputFileURL:fileUrl recordingDelegate:self]; 

但是,根据我的测试,视频记录作出startRecordingToOutputFileURL呼叫前开始0.12秒。我假设这是因为各种视频缓冲区已经充满了被添加到文件中的数据。

有无论如何得到的第一帧的视频的实际NSDate?

+0

你试过用NSTimer吗? – kumar

+0

如果您设置输出通道来捕获原始帧样本数据,则可以访问每个帧的时间戳。但是我还没有能够配置AVCaptureSession的电影输出和原始帧样本数据,所以我不知道如何获得电影文件中第一个录制帧的确切时间戳。 – algal

+0

我只是给你一些提示,但我没有真正的答案。 AVFoundation使用了很多KVO你确定没有“实时”变化的属性吗?您是否尝试打印电影文件的AVItemMetadatas? – Andrea

回答

0

如果我正确地得到你的问题,你想知道第一帧的记录时间戳。你可以尝试

CMTime captureStartTime = nil; 

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { 

     if !captureStartTime{ 
     captureStartTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer); 
     } 
    // do the other things you want 
} 
+0

当我尝试这个时,我无法捕获电影文件输出。你有一个可以捕获样本缓冲区时间戳和电影文件的工作示例吗? – algal