CMTime的一些使用方法

親愛(ài)的程序猿們,節(jié)日快樂(lè)!??!


77411FA88F64D57A512B2AB3A4395C9D.jpg

CMTime定義是一個(gè)C語(yǔ)言的結(jié)構(gòu)體,使用雙精度double類型表示時(shí)間,比NSTimeInterval浮點(diǎn)型數(shù)據(jù)精度要高。

    typedef struct
    {
          CMTimeValue    value; // 分子
          CMTimeScale    timescale;// 分母
          CMTimeFlags    flags;// 位掩碼 kCMTimeFlags_Valid kCMTimeFlags_PositiveInfinity(表示時(shí)間的指定狀態(tài),判斷時(shí)間是否有效、不確定和是否出現(xiàn)舍入值)
          CMTimeEpoch    epoch;// Flag bits for a CMTime
    } CMTime;

Core Media通過(guò)這種方式合理的表示時(shí)間值。

CMTime 創(chuàng)建

    CMTime time1 = CMTimeMake(3, 1);//對(duì)于音頻時(shí)間可能存在對(duì)應(yīng)的timescale不能寫固定值1
    CMTime time2 = CMTimeMake(6, 1);
     // 打印CMTime
    CMTimeShow(time1);//{3/1 = 3.000}
    CMTimeShow(time2);//{6/1 = 6.000}
    // 方法傳入的CMTime時(shí)間對(duì)應(yīng)的一個(gè)Value和這個(gè)時(shí)間的timescale
    CMTime time = CMTimeMakeWithSeconds(10, 2);
    CMTimeShow(time);//{20/2 = 10.000}得到的是10.000

CMTime的計(jì)算、比較

相加

    CMTime addTime = CMTimeAdd(time1, time2);
    CMTimeShow(addTime);//{9/1 = 9.000}

相減

    CMTime subTime = CMTimeSubtract(time2, time1);
    CMTimeShow(subTime);//{3/1 = 3.000}

相乘

    CMTime mulTime1 = CMTimeMultiply(time1, 2);
    CMTime mulTime2 = CMTimeMultiplyByFloat64(time1, 1.5);
    CMTime mulTime3 = CMTimeMultiplyByRatio(time1, 2, 3);
    CMTimeShow(mulTime1);//{6/1 = 6.000}
    CMTimeShow(mulTime2);//{4500000000/1000000000 = 4.500}
    CMTimeShow(mulTime3);//{6/3 = 2.000}

比較、獲取最大最小時(shí)間

    //CMTimeCompare(time1, time2) time1小于time2返回-1,等于返回0,大于返回1,和CMTIMECOMPAREINLINE宏都是比較時(shí)間大小。
    int32_t comResult = CMTimeCompare(time1, time2);
    //return true if time1 <= time2.
    BOOL comResult2 = CMTIME_COMPARE_INLINE(time1, <=, time2);
    NSLog(@"%d %d",comResult,comResult2);// -1 1
    CMTime minTime = CMTimeMinimum(time1, time2);
    CMTime maxTime = CMTimeMaximum(time1, time2);
    CMTimeShow(minTime);//{3/1 = 3.000}
    CMTimeShow(maxTime);//{6/1 = 6.000} 

CMTimeRange

  typedef struct
  {
    CMTime            start;// 起點(diǎn)
    CMTime            duration;// 持續(xù)時(shí)間
  } CMTimeRange;

創(chuàng)建時(shí)間范圍

    CMTimeRange timeRange1 = CMTimeRangeMake(time1, time2);
    CMTimeRange timeRange2 = CMTimeRangeFromTimeToTime(time1, time2);
    CMTimeRangeShow(timeRange1);//{{3/1 = 3.000}, {6/1 = 6.000}}
    CMTimeRangeShow(timeRange2);//{{3/1 = 3.000}, {3/1 = 3.000}}

時(shí)間范圍的交集和并集

    CMTimeRange intersectionRange = CMTimeRangeGetIntersection(timeRange1, timeRange2);
    CMTimeRangeShow(intersectionRange);//{{3/1 = 3.000}, {3/1 = 3.000}}
    CMTimeRange unionRange = CMTimeRangeGetUnion(timeRange1, timeRange2);
    CMTimeRangeShow(unionRange);//{{3/1 = 3.000}, {6/1 = 6.000}}
    CMTime endTime = CMTimeRangeGetEnd(timeRange2);
    CMTimeShow(endTime);//{6/1 = 6.000}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 要求時(shí)間高精度時(shí)一般使用CMTime,比如音頻視頻。其他一般情況下一般使用NSTimeInterval,NSTim...
    鞋底沒(méi)紋易摔跤閱讀 2,819評(píng)論 0 2
  • 最近看到一篇關(guān)于CMTime的文章,感覺(jué)講得通俗易懂,就想著翻譯一下,我盡量在語(yǔ)義正確的情況下按照原著來(lái)翻譯,原文...
    鐵甲陳小寶閱讀 6,299評(píng)論 3 7
  • 基于時(shí)間的視聽(tīng)數(shù)據(jù),例如電影文件或視頻流,在AV Foundation框架中被表示AVAsset。其結(jié)構(gòu)決定了大部...
    張芳濤閱讀 1,058評(píng)論 0 4
  • 通常開(kāi)發(fā)者認(rèn)為時(shí)間的呈現(xiàn)格式應(yīng)該是浮點(diǎn)數(shù)據(jù),我們一般使用NSTimeInterval,實(shí)際上它是簡(jiǎn)單的雙精度dou...
    jiangamh閱讀 28,344評(píng)論 3 37
  • 原文:AVFoundation Programming Guide 基于時(shí)間的視聽(tīng)數(shù)據(jù),例如電影文件或視頻流在AV...
    朦朧1919閱讀 955評(píng)論 0 0

友情鏈接更多精彩內(nèi)容