2016-07-18 73 views
-1

我以秒为单位获得当前播放值,但我需要以毫秒为单位。我试图currentTime.value/currentTime.scale。但它没有得到确切的价值。如何获取当前播放时间,AVPlayer中的CMTime以毫秒为单位?

CMTime currentTime = vPlayer.currentItem.currentTime; //playing time 
CMTimeValue tValue=currentTime.value; 
CMTimeScale tScale=currentTime.timescale; 

NSTimeInterval time = CMTimeGetSeconds(currentTime); 
NSLog(@"Time :%f",time);//This is in seconds, it misses decimal value double shot=(float)tValue/(float)tScale; 
shotTimeVideo=[NSString stringWithFormat:@"%.2f",(float)tValue/(float)tScale]; 

CMTime currentTime = vPlayer.currentItem.currentTime; //playing time 
CMTimeValue tValue=currentTime.value; 
CMTimeScale tScale=currentTime.timescale; 

NSTimeInterval time = CMTimeGetSeconds(currentTime); 
NSLog(@"Time :%f",time);//This is in seconds, it misses decimal value 
double shot=(float)tValue/(float)tScale; 
shotTimeVideo=[NSString stringWithFormat:@"%.2f", (float)tValue/(float)tScale]; 
+0

不了你做第二/ 1000? –

+0

@ HariKrishnan.P你确定你用1000乘以秒?大声笑我很困惑! IT应该是秒/ 1000 –

+0

毫秒=秒/ 1000。它的权利之一。我错误地写了 –

回答

2

好吧,首先,你想要的值millisecond不被秒

所以,你可以只使用CMTimeGetSeconds(< #CMTime时间#>)得到秒
然后,如果您想要毫秒,请使用秒/ 1000.f作为float或double值

用于CMTime计算使用CMTime方法
CMTimeMultiplyByRatio(< #CMTime tim E·>,<#int32_t乘数#>,<#int32_t除数#>)
只是这样做 - > CMTimeMultiplyByRatio(yourCMTimeValue,1,1000)

苹果的文档

@function CMTimeMultiplyByRatio 
@abstract Returns the result of multiplying a CMTime by an integer, then dividing by another integer. 
@discussion The exact rational value will be preserved, if possible without overflow. If an overflow 
      would occur, a new timescale will be chosen so as to minimize the rounding error. 
      Default rounding will be applied when converting the result to this timescale. If the 
      result value still overflows when timescale == 1, then the result will be either positive 
      or negative infinity, depending on the direction of the overflow. 

      If any rounding occurs for any reason, the result's kCMTimeFlags_HasBeenRounded flag will be 
      set. This flag will also be set if the CMTime operand has kCMTimeFlags_HasBeenRounded set. 

      If the denominator, and either the time or the numerator, are zero, the result will be 
      kCMTimeInvalid. If only the denominator is zero, the result will be either kCMTimePositiveInfinity 
      or kCMTimeNegativeInfinity, depending on the signs of the other arguments. 

      If time is invalid, the result will be invalid. If time is infinite, the result will be 
      similarly infinite. If time is indefinite, the result will be indefinite.        


@result  (time * multiplier)/divisor 
+0

是的,我在阅读了CMTime后得到了它。感谢您的回答:) –

+1

数学定律说毫秒是*乘以*秒乘以1000检索 – codelearner

+0

@codelearner emmm?如果如你所说,1毫秒= 1秒乘以1000,1000毫秒如何等于1秒? –

相关问题