2011-11-18 241 views

回答

115

您可以通过使用currentItem属性访问当前播放的项目:

AVPlayerItem *currentItem = yourAVPlayer.currentItem; 

然后你就可以很容易地得到所要求的时间值

CMTime duration = currentItem.duration; //total time 
CMTime currentTime = currentItem.currentTime; //playing time 
+9

的重新也方便的方法CMTimeGetSeconds来获得NSTimeInterval: NSTimeInterval duration = CMTimeGetSeconds(currentItem.duration); NSTimeInterval currentTime = CMTimeGetSeconds(currentItem.currentTime); – slamor

+0

我不得不在主队列中调用它来返回正确的值(或者你的avplayer运行的任何队列)。 –

+0

如何把这个推荐给LABEL? –

20
_audioPlayer = [self playerWithAudio:_audio]; 
_observer = 
[_audioPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 2) 
              queue:dispatch_get_main_queue() 
             usingBlock:^(CMTime time) 
             { 
              _progress = CMTimeGetSeconds(time); 
             }]; 
5
 AVPlayerItem *currentItem = player.currentItem; 
    NSTimeInterval currentTime = CMTimeGetSeconds(currentItem.currentTime); 
    NSLog(@" Capturing Time :%f ",currentTime); 
+0

我正在从URL播放歌曲。但在CMTime持续时间和CMTime currentTime我变得0。这里的0值有什么问题?有谁知道解决方案? – Moxarth

3

斯威夫特:

let currentItem = yourAVPlayer.currentItem 

let duration = currentItem.asset.duration 
var currentTime = currentItem.asset.currentTime 
+0

从.currentItem.asset.duration获取CMTime需要3-4秒?如何解决这个问题?我仍然使用线程,但没有解决? –

6

用Swift 2.0,用这个;

let currentPlayerItem = AVPlayer.currentItem 
let duration = currentPlayerItem?.asset.duration 
var currentTime = AVPlayer.currentTime() 
+0

我试图使用AVPlayer.currentTime(),但没有运气,得到错误访问错误 – KavyaKavita

+0

从.currentItem.asset.duration获取CMTime需要3-4秒?如何解决这个问题?我仍然使用线程,但没有解决? –

6

斯威夫特3

let currentTime:Double = player.currentItem.currentTime().seconds 

您可以通过访问currentTime()seconds财产得到您的当前时间的秒数。这将返回代表时间秒数的Double。然后你可以使用这个值来构建一个可读的时间来呈现给你的用户。

首先,包括对返回的时间变量H:mm:ss,你将显示给用户的方法:

func getHoursMinutesSecondsFrom(seconds: Double) -> (hours: Int, minutes: Int, seconds: Int) { 
    let secs = Int(seconds) 
    let hours = secs/3600 
    let minutes = (secs % 3600)/60 
    let seconds = (secs % 3600) % 60 
    return (hours, minutes, seconds) 
} 

接下来,将你上述检索的值转换成可读的字符串方法:

func formatTimeFor(seconds: Double) -> String { 
    let result = getHoursMinutesSecondsFrom(seconds: seconds) 
    let hoursString = "\(result.hours)" 
    var minutesString = "\(result.minutes)" 
    if minutesString.characters.count == 1 { 
     minutesString = "0\(result.minutes)" 
    } 
    var secondsString = "\(result.seconds)" 
    if secondsString.characters.count == 1 { 
     secondsString = "0\(result.seconds)" 
    } 
    var time = "\(hoursString):" 
    if result.hours >= 1 { 
     time.append("\(minutesString):\(secondsString)") 
    } 
    else { 
     time = "\(minutesString):\(secondsString)" 
    } 
    return time 
} 

现在,更新与之前计算的UI:

func updateTime() { 
    // Access current item 
    if let currentItem = player.currentItem { 
     // Get the current time in seconds 
     let playhead = currentItem.currentTime().seconds 
     let duration = currentItem.duration.seconds 
     // Format seconds for human readable string 
     playheadLabel.text = formatTimeFor(seconds: playhead) 
     durationLabel.text = formatTimeFor(seconds: duration) 
    } 
} 
相关问题