【问题标题】:Update Showing Frame of AVPlayer When Using AVPlayer.seek() Prior to AVPlayer.play()在 AVPlayer.play() 之前使用 AVPlayer.seek() 时更新 AVPlayer 的显示帧
【发布时间】:2021-02-28 21:18:17
【问题描述】:

我有一个AVPlayer,当我到达持续时间结束时,我想回到开始,但我不想重新启动AVPlayer

//Do something when video ended
NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying(note:)), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)

@objc func playerDidFinishPlaying(note: Notification) {
    self.restartVideo()
}
    
func restartVideo() {
    self.player.seek(to: .zero, toleranceBefore: .zero, toleranceAfter: .zero)
}

从这里,我可以简单地.play()AVPlayer,它会从头开始播放。但是,在我之前.play().seek() 函数并没有向用户表明它已被重置回开始。在我执行.play() 之后,AVPlayer 帧实际上不会转换回第一帧。

问题: 在使用.seek() 功能时,如何让AVPlayer 更改它向用户显示的实际帧?

【问题讨论】:

标签: swift avplayer


【解决方案1】:

这部分代码是对的。可能是别的什么叫它寻求结束? 您可以使用完成处理程序来查看查找是否被中断。并且还设置一个断点来查看你在哪个队列上,只是为了确保你在主线程上。如果发生第二次查找操作,您将在完成处理程序中得到错误结果。另外,尝试在搜索后设置断点以检查 UI 是否响应。

    self.player.seek(to: .zero, toleranceBefore: .zero, toleranceAfter: .zero) { success in
        print("seek finished success = ", success)
    }

【讨论】:

    【解决方案2】:

    这样设置

    self.player.seek(to: .zero) // it will update the player slider to 0:00
    

    如果你想设置特定的时间而不是像这样使用它

    // Seek to the 2 minute mark
    let time = CMTime(value: 120, timescale: 1)
    self.player.seek(to: time)
    

    【讨论】:

      猜你喜欢
      • 2015-11-24
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      相关资源
      最近更新 更多