Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone objectiveC/CMTime-将AVPlayer.duration转换为毫秒_Iphone_Avfoundation_Avplayer_Cmtime - Fatal编程技术网

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

Iphone objectiveC/CMTime-将AVPlayer.duration转换为毫秒,iphone,avfoundation,avplayer,cmtime,Iphone,Avfoundation,Avplayer,Cmtime,我正在创建一个播放铃声的应用程序,我想知道每次播放铃声的当前时间(以毫秒为单位) CMTime cTime=播放器\当前时间; float currentTime=cTime.value/cTime.timescale 此处的currentTime以秒为单位获取值。 如何获得准确的currentTime值,但以毫秒为单位?

我正在创建一个播放铃声的应用程序,我想知道每次播放铃声的当前时间(以毫秒为单位)

CMTime cTime=播放器\当前时间; float currentTime=cTime.value/cTime.timescale

此处的currentTime以秒为单位获取值。
如何获得准确的currentTime值,但以毫秒为单位?

有一种以秒为单位获取当前时间的方法,您可以获取1000倍的时间,然后获得毫秒:

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

遗憾的是,您必须将其用作
float
Float64
您不能将该结果用作
CMTime

我认为已接受的答案失去了细节。获取毫秒的更准确方法如下所示:

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

如果你先转换成秒,你就会失去精度

但是我们如何在下面的函数中传递这个浮点值呢(BOOL)insertTimeRange:(CMTimeRange)track的时间范围:(AvassettTrack*)track atTime:(CMTime)startTime错误:(NSError**)错误;因为它将CMTime作为参数。您可以使用原始时间(以秒为单位)并使用CMTimeMake函数创建具有该值的CMTime。这个十年前的答案仍然适用于时间测试。非常感谢。帮助我们解决了一个问题,在这个过程中损失了几分之一秒。这是错误的。根据苹果在CMTimeGetSeconds上的文档,“除法是在Float64中完成的,因此分数不会在返回的结果中丢失。”