在 AVPlayer 中禁用时间搜索

Disable time seek in AVPlayer

我正在使用 AVPlayer 在 tvOS 中播放非常短的视频。现在,当我触摸遥控器时,视频的时间线就会出现,我可以快进和快退。有没有办法完全禁用它,即强制用户从头到尾查看剪辑而不能 forward/backward/pause/...?

您正在使用 AVPlayerViewController,如果您使用另一个 ViewController 并初始化一个 AVPlayer 并将其添加为子视图,您将无法获取时间。

如果您想禁用 play/pause,您可以覆盖 pressedEnded 中的 play/pause 按钮。

找到一个简单的解决方案:从 AVPlayerViewController 中,可以将 属性 showsPlaybackControls 设置为 false。因此,例如在构造函数中:

class PlayerViewController: AVPlayerViewController, AVPlayerViewControllerDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.showsPlaybackControls = false
    }
}

然后控件不再出现并且 forward/backward/play/pause 也不再工作。

yourPlayerController.requiresLinearPlayback = true 就可以了。

使用

self.playerController.setValue(true, forKey: "requiresLinearPlayback")

在 tvOS 上你可以直接调用 playerViewController.requiresLinearPlaybackSelector = true 但如果你通过 Google 找到这个答案并寻找 iOS:

还有相同的 api(目前在 iOS 11 中是私有的),您可以在其中将 requiresLinearPlayback 设置为 true 或 false。如果你尝试在 iOS 10 上调用它,你会崩溃(如果私有 api 被更改,可能会在未来的 iOS 版本上调用它)所以不要盲目地将 setValue:forKey: 调用为其他人建议。

而是使用选择器来确保它存在,然后安全地调用它:

    let requires = true // or false
    let requiresLinearPlaybackSelector = #selector(setRequiresLinearPlayback(_:))
    if playerViewController.responds(to: requiresLinearPlaybackSelector) {
        playerViewController.perform(requiresLinearPlaybackSelector, with: requires ? 1 : nil)
    }