CMTime
结构体代表以有理数形式存储的时间长度(详见CMTime参考文献)。CMTime
包含一个value
和一个timescale
字段,表示时间为value/timescale秒
。
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
最后两个时间值 t3
和 t4
表示相同的时间值,因此
CMTimeCompare(t3, t4) == 0
如果你设置了 AVCaptureSession
的 videoMinFrameDuration
,则无论你如何设置,它都不会有任何区别。connection.videoMinFrameDuration = CMTimeMake(1, 20); // or
connection.videoMinFrameDuration = CMTimeMake(2, 40);
在这两种情况下,帧之间的最小时间间隔设置为1/20 = 0.05秒。
CMTimeMake(3, 1)
表示创建一个时间值为 3 秒的 CMTime 对象,帧率为 1。 - Martin R我的经验与此不同。
对于let testTime = CMTime(seconds: 3.83, preferredTimescale: 100)
如果您设置断点并查看调试器侧窗口,它会显示:
"383毫秒"
通过在AVPlayer中寻找固定偏移量进行测试已经证实这一点。
所以将实际秒数放入秒字段中,而将精度放入preferredTimescale字段中。因此,100表示精度为百分之一秒。
执行以下操作:let testTime = CMTime(seconds: 3.83, preferredTimescale: 100)
仍然在视频的相同位置进行搜索,但在调试器侧窗口中显示为“3833 1000分之一秒”
执行以下操作:let testTime = CMTime(seconds: 3.83, preferredTimescale: 1)
不会搜索视频的相同位置,因为它已被截断,并且在调试器侧窗口中显示为“3秒”。请注意,由于preferredTimescale缩放,.833部分已丢失。
CMTime(seconds: value, timescale: scale)
在仅一秒钟内的平均值/范围