关于seekToTime的avplayer整理歌曲

时间:2015-11-16 21:26:02

标签: ios swift avplayer cmtime 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的参考资料,并在StackOverflow上查看了其他问题,但无法找到任何问题。

也许我不理解如何正确使用CMTime,或者文件有些奇怪,但这对我来说真的很奇怪。

感谢任何帮助。提前谢谢!

1 个答案:

答案 0 :(得分:0)

我在使用AVPlayer时遇到很多问题,尤其是SeekToTime方法。

当你这样做时

avPlayer.currentItem!.seekToTime(kCMTimeZero)

avPlayer正在跳转到0帧而不是第一帧。帧#0和最后一帧似乎是AVPlayer的相同。尝试以下方法:(比如跳到时间0.001而不是0)

        let seekTime : CMTime = CMTimeMake(1, 1000)
        avPlayer!.seekToTime(seekTime)