试图了解CMTime

2020/11/30 22:11 · ios ·  · 0评论

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

显然,CMTimeMake(value,timeScale)应该每1 / timeScale秒给我值帧,以获得value / timeScale秒的总和,否则我错了吗?

为什么没有在任何地方记录此文件以解释其作用?

如果确实如此工作,我将如何获得不确定数量的帧?

很抱歉,如果真的很简单,但是还没有点击。

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是a,AVCaptureSession设置没有区别

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

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

我的经历不同。

对于 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部分已丢失。

本文地址:http://ios.askforanswer.com/shitulejiecmtime.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!