avplayer 在 seekToTime 上完成歌曲
avplayer finishing song on seekToTime
我正在尝试让 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 的参考资料并查看 Whosebug 上的其他问题,但找不到任何内容。
也许我不明白如何正确使用 CMTime,或者文件有些奇怪,但这对我来说真的很奇怪。
感谢任何帮助。提前致谢!
我也遇到了很多关于 AVPlayer 的问题,尤其是 SeekToTime 方法。
当你
avPlayer.currentItem!.seekToTime(kCMTimeZero)
avPlayer 跳转到第 0 帧,而不是它应该跳到的第一个帧。对于 AVPlayer,第 0 帧和最后一帧似乎是相同的。尝试以下操作:(比如跳转到时间 0.001 而不是 0)
let seekTime : CMTime = CMTimeMake(1, 1000)
avPlayer!.seekToTime(seekTime)
我正在尝试让 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 的参考资料并查看 Whosebug 上的其他问题,但找不到任何内容。
也许我不明白如何正确使用 CMTime,或者文件有些奇怪,但这对我来说真的很奇怪。
感谢任何帮助。提前致谢!
我也遇到了很多关于 AVPlayer 的问题,尤其是 SeekToTime 方法。
当你
avPlayer.currentItem!.seekToTime(kCMTimeZero)
avPlayer 跳转到第 0 帧,而不是它应该跳到的第一个帧。对于 AVPlayer,第 0 帧和最后一帧似乎是相同的。尝试以下操作:(比如跳转到时间 0.001 而不是 0)
let seekTime : CMTime = CMTimeMake(1, 1000)
avPlayer!.seekToTime(seekTime)