为了账号安全,请及时绑定邮箱和手机立即绑定

试图了解CMTime和CMTimeMake

试图了解CMTime和CMTimeMake

iOS
子衿沉夜 2019-12-13 10:12:46
1)CMTimeMake(1,10)表示持续时间为1秒,时标为10或每秒10帧。这意味着1秒的视频持续时间为10帧?2)CMTime lastTime=CMTimeMake(1,10);CMTime frameTime=CMTimeMake(1, 10);CMTime currentTime=CMTimeAdd(lastTime, frameTime)=(2,10)?2秒的视频和当前时间每秒10帧?
查看完整描述

3 回答

?
萧十郎

TA贡献1815条经验 获得超12个赞

1)CMTimeMake(1,10)实际上表示值1和时标10。它们是分子和分母,所以它是1/10秒,而不是1秒。

2)结果将类似于CMTimeMake(2, 10),即2/10秒。


查看完整回答
反对 回复 2019-12-13
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

以下代码使概念更清晰:


1)


Float64 seconds = 5; 

int32_t preferredTimeScale = 600;

CMTime inTime = CMTimeMakeWithSeconds(seconds, preferredTimeScale);

CMTimeShow(inTime);

上面的代码给出:{3000/600 = 5.000}


这意味着总持续时间为5秒,具有3000帧,时标为每秒600帧。


2)


int64_t value = 10000;

int32_t preferredTimeScale = 600;

CMTime inTime = CMTimeMake(value, preferredTimeScale);

CMTimeShow(inTime);

这给了{10000/600 = 16.667}


这意味着总持续时间为16.667秒,其中10000帧的时标为每秒600帧。


注意CMTimeMake(int64_t值,int32_t时间标度)和CMTimeMakeWithSeconds(Float64秒,int32_t preferredTimeScale)之间的差异


希望这种解释有所帮助。如需进一步的说明,请不要犹豫,在此职位上发表其他问题。


查看完整回答
反对 回复 2019-12-13
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

随着CMTimeMake(A, B)你存储一个有理数,一个确切的分数A / B

  • CMTimeMake(1, 4) ->时间间隔0.25秒

随着CMTimeMakeWithSeconds(A, B)您存储A 秒数以达到B步骤分辨率

  • CMTimeMakeWithSeconds(0.25, ...) ->时间间隔0.25秒

您通常会看到CMTimeMakeWithSeconds(time, NSEC_PER_SEC)。在NSEC_PER_SEC实际上意味着“ 最高分辨率 ”。


查看完整回答
反对 回复 2019-12-13
  • 3 回答
  • 0 关注
  • 936 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信