CMTime簡單介紹

通常開發(fā)者認(rèn)為時(shí)間的呈現(xiàn)格式應(yīng)該是浮點(diǎn)數(shù)據(jù),我們一般使用NSTimeInterval,實(shí)際上它是簡單的雙精度double類型,只是typedef了一下,但是由于浮點(diǎn)型數(shù)據(jù)計(jì)算很容易導(dǎo)致精度的丟失,在一些要求高精度的應(yīng)用場景顯然不適合,于是蘋果在Core Media框架中定義了CMTime數(shù)據(jù)類型作為時(shí)間的格式,類型定義如下:


  typedef struct 
CMTimeValue value; 
CMTimeScale timescale; 
CMTimeFlags flags;
CMTimeEpoch epoch; } CMTime;

顯然,CMTime定義是一個(gè)C語言的結(jié)構(gòu)體,CMTime是以分?jǐn)?shù)的形式表示時(shí)間,value表示分子,timescale表示分母,flags是位掩碼,表示時(shí)間的指定狀態(tài)。
CMTime的創(chuàng)建
我們一般使用CMTimeMake函數(shù)創(chuàng)建,如下:


  CMTime t1 = CMTimeMake(3, 1);
  CMTime t2 =  CMTimeMake(6, 3);

我們也可以通過CMTimeShow函數(shù)打印CMTime的相關(guān)信息如:

 CMTimeShow(t1); CMTimeShow(t2);

結(jié)果如:{3/1 = 3.000}{6/3 = 2.000}
CMTime計(jì)算
相加


  CMTime t3 = CMTimeAdd(t1, t2);

想減
CMTime t4 = CMTimeSubtract(t3, t1);

我們也可以通過CMTimeGetSeconds函數(shù)獲取時(shí)間的秒數(shù)。
CMTimeRange
CMTimeRange是一個(gè)表示時(shí)間范圍的一個(gè)數(shù)據(jù)類型,定義如下:


  typedef struct{ 
  CMTime start; CMTime duration;
  } CMTimeRange;

其中start表示時(shí)間的起點(diǎn),duratin表示時(shí)間范圍的持續(xù)時(shí)間。一般使用CMTimeRangeMake和CMTimeRangeFromTimeToTime創(chuàng)建如:

  CMTimeRange timeRange1 = CMTimeRangeMake(t1, t2);
  CMTimeRange timeRange2 = CMTimeRangeFromTimeToTime(t4, t3);

CMTimeRange的交集和并集
有時(shí)候我們需要獲取兩個(gè)時(shí)間范圍的交叉時(shí)間范圍或者兩個(gè)時(shí)間范圍的總和時(shí)間范圍。
交叉時(shí)間范圍


  CMTimeRange intersectionRange = CMTimeRangeGetIntersection(timeRange2, timeRange1);

總和時(shí)間范圍

  CMTimeRange unionRange = CMTimeRangeGetUnion(timeRange1, timeRange2);

CMTime一般用的不多,但是在時(shí)間精度有要求的應(yīng)用中會(huì)用到,比如音頻,視頻的處理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容