CMTime

作者: Rui哥 | 来源:发表于2017-11-22 20:56 被阅读10次

最近看到一篇关于CMTime的文章,感觉讲得通俗易懂,正好最近也在看相关的资料就顺便记录下来,以便自己今后回忆复习.

准确的看待时间

大部分人是不需要精确的知道时间的。举一个极端的,如果你是奥运会百米运动员,你可能会关心你和时间记录之间的微秒差距.但就现状来说,目前的时间表示就已经很不错了。但是在多媒体中,我们可能会关心很长的 ( 几天或几周 ) 或很短的 ( 十几微秒 ) 的时间。

如果我们想表示一个视频文件中的某一瞬间,如35:06,我们可能会用双精度浮点数来表示它,比如:

NSTimeInterval t = 2106.0。大部分时候这样是没错的,但是我们想把时间分的特别细的时候这个就不行了。我所了解的大部分平台 ( sizeof(NSTimeInterval) == sizeof(Float64) == sizeof(double) == 8 ),一个浮点数,如double,只能粗略的表示小数点后16位。

浮点数在某些时候重复操作 ( 如加减乘除等 ) 会遇到一些问题,比如在进行一系列的运算之后,浮点数表示的时间可能就和准确时间产生较大区别,就可能在同步多媒体流时产生一些错误。

比如将一百万个0.0000001相加,运算结果可能会变成1.0000000000079181,产生这个问题的原因是浮点数不能准确的表示10的-6次方。这个错误不是那么明显,但是如果你在HTTP流中以每秒上千次的方式运行,还是有可能会出现错误的。

这就导致我们必须废除以前的浮点计数法,寻找一个新方法来准确的表示时间。

CMTime是一种C函数结构体,有4个成员。

typedef struct {
CMTimeValue value; // 当前的CMTimeValue 的值
CMTimeScale timescale; // 当前的CMTimeValue 的参考标准 (比如:1000)
CMTimeFlags flags;
CMTimeEpoch epoch;
} CMTime;

CMTimeValue value; 当前的CMTimeValue 的值

CMTimeScale timescale; 当前的CMTimeValue 的参考标准,它表示1秒的时间被分成了多少份。因为整个CMTime的精度是由它控制的所以它显的尤为重要。例如,当timescale为1的时候,CMTime不能表示1秒一下的时间和1秒内的增长。相同的,当timescale为1000的时候,每秒钟便被分成了1000份,CMTime的value便代表了多少毫秒。

如果 timescale = 1000, 我们需要用cmtime表示我们平时说的1s ,那么 CMTimeValue = 1000 * 1 = 1000.

CMTimeFlags flags; flags的各种值会表示时间戳的正无穷或负无穷,或已经被中间计算为一个结果。这样的数据结构显然比浮点数具有更强的表示力,并且有很多优势。

平时用的比较多的:

  CMTimeGetSeconds(CMTime time)  
   
  CMTimeMake(int64_t value, int32_t timescale)
   
  CMTimeAdd(CMTime addend1, CMTime addend2)

  CMTimeCompare(CMTime time1, CMTime time2)

  CMTimeRangeMake(CMTime start,CMTime duration)

相关文章

  • AVPlayer seek 位置不精确问题

    func seek(to time: CMTime, toleranceBefore: CMTime, toler...

  • CMTime

    CMTime 一个用来描述视频时间的结构体。他有两个构造函数:\ * CMTimeMake\* CMTimeMak...

  • CMTime

    要求时间高精度时一般使用CMTime,比如音频视频。其他一般情况下一般使用NSTimeInterval,NSTim...

  • CMTime

    最近看到一篇关于CMTime的文章,感觉讲得通俗易懂,正好最近也在看相关的资料就顺便记录下来,以便自己今后回忆复习...

  • CMTime

    CMTime 其实是帧时间,取值为(0,1),单位是秒是用当前帧数除以帧率算出来的,表示当前帧在视频时长的哪个点 ...

  • CMTime

    参考:https://www.jianshu.com/p/d6f9d7e493b6 一、CMTimeMakeWit...

  • AVFoundation视频处理的时间CMTime

    一、CMTime Core Media定义的一种时间数据类型 1、创建CMTime 1、CMTimeMake()C...

  • iOS CMTimeMake 和 CMTimeMakeWithS

    CMTime是专门用于标识电影时间的结构体,通常用如下两个函数来创建CMTime1、CMTimeMake valu...

  • CMTime & CMTimeRange

    这篇文章主要是为了学习记录CMTime,为了之后用到时可以翻阅。 1.CMTime介绍 Core Media定义的...

  • iOS 了解CMTime

    认识cmtime cmtime有两个重要的值,一个是value,一个是timescale这里的timescale并...

网友评论

      本文标题:CMTime

      本文链接:https://www.haomeiwen.com/subject/wzwovxtx.html