2011-05-11 125 views
15

我正在創建一個用於播放鈴聲的應用程序,我想知道每次播放鈴聲的當前時間(以毫秒爲單位)。objectiveC/CMTime - 將AVPlayer.duration轉換爲毫秒

CMTime cTime = player_.currentTime; float currentTime = cTime.value/cTime.timescale;

那currentTime在這裏得到的值以秒爲單位。 如何獲得確切的currentTime值,但以毫秒爲單位?

回答

52

有一種方式來獲得當前的時間以秒計,你可以採取1000倍和療法,你有你的毫秒:

Float64 dur = CMTimeGetSeconds([player currentTime]); 
Float64 durInMiliSec = 1000*dur; 

可悲的是,你將不得不使用它作爲一個floatFloat64你可以」 t使用該結果作爲CMTime

+0

但是我們如何在下面的函數中傳遞這個Float值呢? (BOOL)insertTimeRange:(CMTimeRange)timeRange ofTrack:(AVAssetTrack *)track atTime:(CMTime)startTime error:(NSError **)error; 因爲它將CMTime作爲參數。 – Developer 2012-12-27 12:15:46

+0

您可以使用原始時間(以秒爲單位),並使用CMTimeMake函數創建具有該值的CMTime。 – Samssonart 2013-01-15 17:26:12

2

CMTime.value和CMTime.timescale都是整數,所以根據您的代碼判斷,結果會變爲四捨五入狀態,並且不會得到精確的時間戳。請嘗試CMTimeGetSeconds。

4

我認爲接受的答案會丟失細節。更精確的獲得毫秒的方法如下:

let seconds : Double = Float64(time.value * 1000)/Float64(time.timescale) 

如果您先轉換爲秒,則會失去精度。

+0

這是不正確的。從Apple的CMTimeGetSeconds文檔中獲得「該部分在Float64中完成,因此分數不會丟失在返回的結果中。」 – amergin 2017-08-28 17:04:23