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;
可悲的是,你将不得不使用它作为一个float
或Float64
你可以” t使用该结果作为CMTime
CMTime.value和CMTime.timescale都是整数,所以根据您的代码判断,结果会变为四舍五入状态,并且不会得到精确的时间戳。请尝试CMTimeGetSeconds。
我认为接受的答案会丢失细节。更精确的获得毫秒的方法如下:
let seconds : Double = Float64(time.value * 1000)/Float64(time.timescale)
如果您先转换为秒,则会失去精度。
这是不正确的。从Apple的CMTimeGetSeconds文档中获得“该部分在Float64中完成,因此分数不会丢失在返回的结果中。” – amergin 2017-08-28 17:04:23
但是我们如何在下面的函数中传递这个Float值呢? (BOOL)insertTimeRange:(CMTimeRange)timeRange ofTrack:(AVAssetTrack *)track atTime:(CMTime)startTime error:(NSError **)error; 因为它将CMTime作为参数。 – Developer 2012-12-27 12:15:46
您可以使用原始时间(以秒为单位),并使用CMTimeMake函数创建具有该值的CMTime。 – Samssonart 2013-01-15 17:26:12