首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试理解CMTime

尝试理解CMTime
EN

Stack Overflow用户
提问于 2012-10-16 03:11:11
回答 2查看 31.3K关注 0票数 67

我看过一些examples of CMTime (三个独立的链接),但我还是不明白。我正在使用带有AVCaptureVideoDataOutput的AVCaptureSession,我想设置输出的最大和最小帧速率。我的问题是我就是不理解CMTime结构。

显然,CMTimeMake( value,timeScale)应该每隔1/时间刻度秒给我一个值帧,总共是value/时间刻度秒,还是我弄错了?

为什么在任何地方都没有文档来解释它的作用?

如果它真的是这样工作的,我怎么能让它有无限的帧数呢?

如果它真的很简单,我很抱歉,但现在还没有点击。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-22 04:32:29

CMTime结构表示以有理数形式存储的时间长度(请参阅CMTime Reference)。CMTime有一个value和一个timescale字段,表示时间value/timescale seconds

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

代码语言:javascript
复制
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表示相同的时间值,因此

代码语言:javascript
复制
CMTimeCompare(t3, t4) == 0

如果设置了AVCaptureSessionvideoMinFrameDuration,如果设置了

代码语言:javascript
复制
connection.videoMinFrameDuration = CMTimeMake(1, 20); // or
connection.videoMinFrameDuration = CMTimeMake(2, 40);

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

票数 174
EN

Stack Overflow用户

发布于 2020-04-08 05:36:29

我的经验有所不同。

对于let testTime = CMTime(seconds: 3.83, preferredTimescale: 100)

如果您设置了一个断点并查看调试器侧窗口,它会显示:

"383百分之一秒“

通过在AVPlayer的视频中寻求固定偏移量的测试已经证实了这一点。

因此,将实际秒数放在seconds字段中,将精度放在preferredTimescale字段中。所以100意味着百分之一秒的精度。

let testTime = CMTime(seconds: 3.83, preferredTimescale: 100)

仍然在视频中查找相同的位置,但它在调试器侧窗口中显示为"3833千分之一秒“

let testTime = CMTime(seconds: 3.83, preferredTimescale: 1)

不会在视频中查找相同的位置,因为它已被截断,并且在调试器侧窗口中显示为"3秒“。请注意,由于preferredTimescale,.833部件已丢失。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12902410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档