2015-11-16 3 views
1

Я пытаюсь перезапустить текущую песню, когда кнопка перехода назад выбрана, если она находится примерно через 5 секунд в песне, и переходите к разу в соответствии с тем, куда перемещается ползунок. Вот мой код для этих функций:avplayer заканчивая песня на seekToTime

@IBAction func buttonBackTouchDown(sender: AnyObject) { 
    if (Float(CMTimeGetSeconds((avPlayerItem?.currentTime())!)) > 5) { 
     //restartSong = true 
     avPlayer.currentItem!.seekToTime(kCMTimeZero) 
     //self.loadSongValues() 
     //restartSongTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("setRestartSongToFalse"), userInfo: nil, repeats: false) 
    } 
    else if (Float(CMTimeGetSeconds((avPlayerItem?.currentTime())!)) < 5) { 
     self.previousSong() 
    } 
} 


@IBAction func sliderTouchDown(sender: AnyObject) { 
     self.sliderTimer.invalidate() 
     avPlayer.pause() 
     self.overlayOn() 
    } 


@IBAction func sliderTouchUpInside(sender: AnyObject) { 
     //restartSongTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("setRestartSongToFalse"), userInfo: nil, repeats: false) 
     //NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("startSliderTimer"), userInfo: nil, repeats: false) 
     self.startLabelTimer() 
     avPlayer.play() 
     self.updateNowPlayingInfoCenter() 
     self.overlayOff() 
    } 

Проблема у меня в том, что если песня через 1 минуту в, или это почти закончена, и я двигаю ползунок слишком далеко назад, ИНОГДА запускает этот наблюдатель:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "skipSong", name: AVPlayerItemDidPlayToEndTimeNotification, object: avPlayerItem) 

Я пытался смотреть в ссылках от Apple и посмотрел на другие вопросы здесь, на StackOverflow, но не смог найти ничего.

Возможно, я не понимаю, как правильно использовать CMTime, или что-то странно с файлами, но это действительно странно для меня.

Любая помощь приветствуется. Заранее спасибо!

ответ

0

У меня также возникает много проблем с AVPlayer и, в частности, методом SeekToTime.

Когда вы

avPlayer.currentItem!.seekToTime(kCMTimeZero) 

AVPlayer прыгает в 0 кадр и не первый кадр, как это должно быть. Frame # 0 и последний кадр кажутся одинаковыми для AVPlayer. Попробуйте следующее: (например, прыгать во время 0.001 вместо 0)

 let seekTime : CMTime = CMTimeMake(1, 1000) 
     avPlayer!.seekToTime(seekTime) 
Смежные вопросы