首页 文章

试图了解CMTime

提问于
浏览
40

我已经看到了一些examples of CMTime(三个单独的链接),但我仍然使用AVCaptureSession和AVCaptureVideoDataOutput并且我想设置输出的最大和最小帧速率't get it. I'm . 我的问题是我只是不理解CMTime结构 .

显然CMTimeMake(value,timeScale)应该每隔1 / timeScale秒给我一个值帧,总共得到value / timeScale秒,或者我错了吗?

为什么不在任何地方记录这些以解释它的作用?

如果它真的像那样工作,我怎么能让它有无限数量的帧?

如果真的很简单,我很抱歉,但还没有点击过 .

1 回答

  • 125

    CMTime 结构表示存储为有理数的时间长度(请参阅CMTime Reference) . CMTimevaluetimescale 字段,表示时间 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
    

    如果设置 AVCaptureSessionvideoMinFrameDuration ,则设置为没有区别

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

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

相关问题