我试图让AVPlayer在选择了跳回按钮后重新启动当前歌曲,如果它在歌曲进入约5秒后再跳过,并根据滑块的移动位置跳转到时间。这是我的代码:
@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 :(得分:0)
我在使用AVPlayer时遇到很多问题,尤其是SeekToTime方法。
当你这样做时
avPlayer.currentItem!.seekToTime(kCMTimeZero)
avPlayer正在跳转到0帧而不是第一帧。帧#0和最后一帧似乎是AVPlayer的相同。尝试以下方法:(比如跳到时间0.001而不是0)
let seekTime : CMTime = CMTimeMake(1, 1000)
avPlayer!.seekToTime(seekTime)