试图了解CMTime(Trying to understand CMTime)

2019-06-18 12:46发布

我见过一些例子 的 CMTime (三个独立的链接),但我还是不明白这一点。 我使用的是AVCaptureVideoDataOutput的AVCaptureSession,我想设置输出的最大值和最小值的帧速率。 我的问题是,我只是不明白的CMTime结构。

显然CMTimeMake(值,时间标度)应该给我每1 /秒时间刻度值帧,总共价值/秒的时间表,还是我得到那个错了吗?

为什么没有这个记录任何地方,以解释这个呢?

如果它真的像工作,我将如何得到它具有帧的数量不定?

如果它很简单,我很抱歉,但一切都没有点击,只是还没有。

Answer 1:

CMTime结构表示存储为有理数(见的时间长度CMTime参考 )。 CMTime具有valuetimescale字段,和表示时间value/timescale seconds

CMTimeMake是返回的函数CMTime结构,例如:

CMTime t1 = CMTimeMake(1, 10); // 1/10 second = 0.1 second
CMTime t2 = CMTimeMake(2, 1);  // 2 seconds
CMTime t3 = CMTimeMake(3, 4);  // 3/4 second = 0.75 second
CMTime t4 = CMTimeMake(6, 8);  // 6/8 second = 0.75 second

最后两个时间值t3t4表示相同的时间值,因此

CMTimeCompare(t3, t4) == 0

如果设置了videoMinFrameDuration一个的AVCaptureSession是不会有所作为,如果你设置

connection.videoMinFrameDuration = CMTimeMake(1, 20); // or
connection.videoMinFrameDuration = CMTimeMake(2, 40);

在这两种情况下的帧之间的最小时间间隔设定为1/20 = 0.05秒。



文章来源: Trying to understand CMTime