AVPlayerで再生時間と総再生時間を取得できますか?はいの場合、どうすればいいですか?AVPlayerで現在の再生時間と合計再生時間を取得するにはどうすればよいですか?
答えて
あなたはcurrentItem
プロパティを使用して、現在再生項目にアクセスすることができます
AVPlayerItem *currentItem = yourAVPlayer.currentItem;
その後、あなたは簡単に要求された時間が
CMTime duration = currentItem.duration; //total time
CMTime currentTime = currentItem.currentTime; //playing time
_audioPlayer = [self playerWithAudio:_audio];
_observer =
[_audioPlayer addPeriodicTimeObserverForInterval:CMTimeMake(1, 2)
queue:dispatch_get_main_queue()
usingBlock:^(CMTime time)
{
_progress = CMTimeGetSeconds(time);
}];
AVPlayerItem *currentItem = player.currentItem;
NSTimeInterval currentTime = CMTimeGetSeconds(currentItem.currentTime);
NSLog(@" Capturing Time :%f ",currentTime);
私はURLから曲を再生しています。 CMTimeの期間とCMTimeのcurrentTimeでは0になっています。ここで0値の問題は何ですか?誰もが解決策を知っていますか? – Moxarth
スウィフト値を取得することができます
let currentItem = yourAVPlayer.currentItem
let duration = currentItem.asset.duration
var currentTime = currentItem.asset.currentTime
.currentItem.asset.durationからCMTimeを取得するのに3〜4秒かかりますか?この問題を解決するには?私はまだスレッドを使用しているが解決していない? –
Swift 2.0ではこれを使用します。
let currentPlayerItem = AVPlayer.currentItem
let duration = currentPlayerItem?.asset.duration
var currentTime = AVPlayer.currentTime()
私はAVPlayer.currentTime()を使用しようとしましたが、不幸なアクセスエラーが発生しました – KavyaKavita
.currentItem.asset.durationからCMTimeを取得するのに3-4秒かかりますか?この問題を解決するには?私はまだスレッドを使用しているが解決していない? –
スウィフト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)
}
}
また、NSTimeIntervalを取得するためのCMTimeGetSecondsメソッドも便利です: NSTimeInterval duration = CMTimeGetSeconds(currentItem.duration); NSTimeInterval currentTime = CMTimeGetSeconds(currentItem.currentTime); – slamor
私はそれを正しい値(またはあなたのavplayerが実行しているすべてのキュー)を返すようにメインキューで呼び出すように設定する必要がありました。 –
LABELにこの礼儀を与える方法は? –