web-dev-qa-db-ja.com

AVPlayerで現在の再生時間と合計再生時間を取得するにはどうすればよいですか?

AVPlayerで再生時間と合計再生時間を取得することは可能ですか?はいの場合、どうすればこれを行うことができますか?

66
Voloda2

currentItemプロパティを使用して、現在再生されているアイテムにアクセスできます。

AVPlayerItem *currentItem = yourAVPlayer.currentItem;

その後、要求された時間値を簡単に取得できます

CMTime duration = currentItem.duration; //total time
CMTime currentTime = currentItem.currentTime; //playing time
145
_audioPlayer = [self playerWithAudio:_audio];
_observer =
[_audioPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 2)
                                           queue:dispatch_get_main_queue()
                                      usingBlock:^(CMTime time)
                                      {
                                          _progress = CMTimeGetSeconds(time);
                                      }];
22
comonitos

Swift

_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)
    }
}
_
11
Brandon A

Swift 4.2では、これを使用します。

let currentPlayer = AVPlayer()
if let currentItem = currentPlayer.currentItem {
    let duration = currentItem.asset.duration
}
let currentTime = currentPlayer.currentTime()
9
     AVPlayerItem *currentItem = player.currentItem;
     NSTimeInterval currentTime = CMTimeGetSeconds(currentItem.currentTime);
     NSLog(@" Capturing Time :%f ",currentTime);
5
Athul Raj

迅速:

let currentItem = yourAVPlayer.currentItem

let duration = currentItem.asset.duration
var currentTime = currentItem.asset.currentTime
4
Unis Barakat

スイフト4

    self.playerItem = AVPlayerItem(url: videoUrl!)
    self.player = AVPlayer(playerItem: self.playerItem)

    self.player?.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, 1), queue: DispatchQueue.main, using: { (time) in
        if self.player!.currentItem?.status == .readyToPlay {
            let currentTime = CMTimeGetSeconds(self.player!.currentTime())

            let secs = Int(currentTime)
            self.timeLabel.text = NSString(format: "%02d:%02d", secs/60, secs%60) as String//"\(secs/60):\(secs%60)"

    })
}
3
xuzepei

Swift 4.2:

let currentItem = yourAVPlayer.currentItem
let duration = currentItem.asset.duration
let currentTime = currentItem.currentTime()
0
Matthijs