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)