在 Swift 中,使用 AVPlayer 播放音频完成后,可重新播放:

5

如何在音频播放结束后再次播放相同的音频?现在我使用AVPlayer这段代码:

fileprivate func play () {
    guard let url = URL(string: record.recordUrl) else { return }
    let playItem = AVPlayerItem(url: url)
    player.replaceCurrentItem(with: playItem)
    NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: playItem)
    player.play()
}

@objc func playerDidFinishPlaying(note: NSNotification) {
    print("Player finished")
    currentTimeSlider.setValue(0, animated: true)
    currentTimeLabel.text = "00:00"
}
1个回答

7
@objc func playerDidFinishPlaying(note: NSNotification) {
    print("Player finished")
    currentTimeSlider.setValue(0, animated: true)
    currentTimeLabel.text = "00:00"

    //Swift 4
    player.seek(to: .zero, toleranceBefore: .zero, toleranceAfter: .zero)

    //Swift 2 & 3 (I believe for 2 & 3)
    //player.seek(to: kCMTimeZero, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)

    //Play
    player.play()
}

我将寻找回到开头的功能添加了进去(容差确保它恰好在零点,而不是在零点周围有一定的误差)。

还添加了完成后播放的功能。


很不幸,我遇到了一个错误:“Type 'CMTime' has no member 'zero'”。 - Stanislav Putilov
我的版本是4。 - Stanislav Putilov
1
谢谢你的回答。是的,我已经导入了AVKit。 - Stanislav Putilov
1
我用这种奇怪的方式实现了它:`let zero = CMTime(seconds: 0.0, preferredTimescale: 1)player.seek(to: zero, toleranceBefore: zero, toleranceAfter: zero)`。 - Stanislav Putilov
@StanislavPutilov,那个错误在编辑中有解释。 - Fattie
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接