AVCaptureSession抓取帧时的准确时间戳
我在AVCaptureSession内部,我需要知道被捕获的帧的数量。
捕获开始时,我将帧数计数器重置为零。 因此,第一帧的时间戳将为零。 后续帧将具有这样的捕获时间戳,例如:
0 0.033 0.066 0.099 etc
但这些不是确切的数字,因为可以丢弃帧并且可能发生轻微的差异。 我需要知道捕获帧的确切时间。
我有这个方法,每次抓取一个帧时调用…
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
在这个方法中,我可以获得一个帧的CMTime并使用以下命令将其打印到控制台:
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp( sampleBuffer ); NSLog(@"%lld", timestamp.value);
但这会给我一些疯狂的数字
156317265588132 156317307247388 156317348909678 156317390573453 156317432230603
一个数字和下一个数字之间的差异大约是41,659,256,它似乎不代表抓取帧时带小数位的秒数。
如果我将这个数字除以时间刻度,请使用
NSLog(@"%lld", timestamp.value/timestamp.timescale);
对于25帧,数字将是相同的,并且仅在达到整秒时才会改变。
抓取框架时,如何获得带小数位的精确时间戳(以秒为单位)? 谢谢。
如果我将这个数字除以时间刻度,那么25帧的数字将是相同的,并且只有在达到一整秒时才会改变。
因为整数除法截断。 怎么样
NSLog(@"%f", (float)timestamp.value / timestamp.timescale);
- 如何本地化iPhone上的“计时器”
- 当通过xcode5的xibdevise时,导航栏button项目图像的颜色是不同的
- SWIFT:错误“线程1:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)”是什么意思?
- 对<UINavigationController:0xa98e050>开始/结束外观转换的不平衡调用
- 不兼容的指针types使用UItableViewCelltypes的expression式初始化“CustomCellView *”
- iPhone iOS:SQLite3无法获取表格中的最后一个ID值
- Tableview到Tableview
- 如何增加和减less图像的alpha值与animation在iOS SDK?
- iAd错误“广告资源不可用”