gpt4 book ai didi

swift - 添加观察者以结束短的高分辨率视频

转载 作者:行者123 更新时间:2023-11-28 13:54:04 27 4
gpt4 key购买 nike

我正在尝试使用适用于 iOS12 的 Swift 3 在 AVPlayer 中播放 4k 视频,它工作得很好,但我希望该视频在循环中播放。我发现文章说,你应该使用这种方法来注册视频播放结束:

    NotificationCenter.default.addObserver(self, selector: #selector(self.replay), 
name:NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)

在这种情况下,一旦播放器到达视频结尾,就会调用 self.replay。这适用于普通视频,但一旦我尝试播放 ~4 秒长的视频,它就不会循环播放。重放函数如下所示:

@objc func replay() {
self.playerViewController!.player?.seek(to: CMTime.zero)
self.playerViewController!.player!.playImmediately(atRate: 1)
}

我在呈现 ViewController 的 viewDidLoad 中添加观察者。这是竞争条件吗,因为如上所述,较长的视频效果很好?我怎样才能防止这种行为。

(旁注:不是常规发帖人,所以如果我的问题问错或难以理解,请告诉我)

最佳答案

NotificationCenter.default.addObserver(self, selector: #selector(replay), 
name:NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)

@objc func replay() {
self.playerViewController!.player!.seek(to: CMTime.zero)
self.playerViewController!.player!.play()
}

不确定 playImmediately(atRate:) 的作用,但是,根据我的经验,我知道循环播放视频会将播放器重置为零时间,就像您所做的那样。然后,自然地播放视频。

补充:另一方面,您可以等待视频准备好播放以添加观察员并开始播放视频。

override func viewDidLoad() {
player.addObserver(self, forKeyPath: "status", options: [], context: nil)
}

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if(keyPath == "status" && self.playerViewController!.player!.status == .readyToPlay) {
NotificationCenter.default.addObserver(self, selector: #selector(replay), name:NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
self.playerViewController!.player!.play()
}
}

关于swift - 添加观察者以结束短的高分辨率视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54115389/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com