objectiveC/CMTime - 将AVPlayer.duration转换为毫秒

问题描述:

我正在创建一个用于播放铃声的应用程序,我想知道每次播放铃声的当前时间(以毫秒为单位)。objectiveC/CMTime - 将AVPlayer.duration转换为毫秒

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

那currentTime在这里得到的值以秒为单位。 如何获得确切的currentTime值,但以毫秒为单位?

有一种方式来获得当前的时间以秒计,你可以采取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

CMTime.value和CMTime.timescale都是整数,所以根据您的代码判断,结果会变为四舍五入状态,并且不会得到精确的时间戳。请尝试CMTimeGetSeconds。

我认为接受的答案会丢失细节。更精确的获得毫秒的方法如下:

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

如果您先转换为秒,则会失去精度。

+0

这是不正确的。从Apple的CMTimeGetSeconds文档中获得“该部分在Float64中完成,因此分数不会丢失在返回的结果中。” – amergin 2017-08-28 17:04:23