2011-11-18 7 views

答えて

115

あなたはcurrentItemプロパティを使用して、現在再生項目にアクセスすることができます

AVPlayerItem *currentItem = yourAVPlayer.currentItem; 

その後、あなたは簡単に要求された時間が

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

また、NSTimeIntervalを取得するためのCMTimeGetSecondsメソッドも便利です: 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) 
    } 
}