AVPlayerViewController 播放速度的自定义控制

Posted

技术标签:

【中文标题】AVPlayerViewController 播放速度的自定义控制【英文标题】:Custom control for playback speed for AVPlayerViewController 【发布时间】:2016-04-25 18:22:37 【问题描述】:
    我们可以为AVPlayerViewController添加自定义播放速度(0.5、1.0、1.5、2.0)控件吗? 有没有办法使用UISlider 值更改来刷新速度? 如果当前正在播放,我们可以更改播放速度吗?

【问题讨论】:

以下是您关于是否可以更改速度以及如何更改速度的部分问题的答案:***.com/a/14220680/3487310 感谢您的帮助。它成功了。 @ZeeshanBadshah 你有没有为AVPlayerViewController添加自定义播放速度控制? 【参考方案1】:
    我们可以为AVPlayerViewController添加自定义播放速度(0.5、1.0、1.5、2.0)控件吗?

您可以通过一些小技巧为 AVPlayerViewController 添加自定义播放速度按钮。

ios 11 中,也就是说,您可以通过在“播放/暂停”按钮旁边添加控件来向 AVPlayerViewController 添加一个按钮。该按钮有一个可访问标识符,可帮助您找到该控件。

所以,我所做的基本上是找到“播放/暂停”按钮并将我的播放速度按钮添加到“播放/暂停”按钮的超级视图中。

func findPlayPauseButton(view: UIView) -> UIView? 
    if view.accessibilityIdentifier == "Play/Pause" 
        return view
    
    for subview in view.subviews 
        if let result = findPlayPauseButton(view: subview) 
            return result
        
    
    return nil


guard let playerView = playerViewController?.view else 
    return


guard let playPauseButton = findPlayPauseButton(view: playerView) else 
    return


if let playerControlsView = playPauseButton.superview 
    let playbackSpeedButton = UIButton(type: .system)
    playbackSpeedButton.accessibilityIdentifier = "PlaybackSpeed"
    playbackSpeedButton.setTitle("1 X", for: .normal)
    playbackSpeedButton.addTarget(self, action: #selector(self.playbackSpeedButtonTapped), for: .touchUpInside)
    playbackSpeedButton.translatesAutoresizingMaskIntoConstraints = false
    playerControlsView.addSubview(playbackSpeedButton)
    NSLayoutConstraint.activate([
        playbackSpeedButton.heightAnchor.constraint(equalTo: playPauseButton.heightAnchor),
        playbackSpeedButton.widthAnchor.constraint(equalToConstant: 50),
        playbackSpeedButton.leadingAnchor.constraint(equalTo: playPauseButton.trailingAnchor, constant: 70),
        playbackSpeedButton.bottomAnchor.constraint(equalTo: playPauseButton.bottomAnchor),
    ])

结果:

您可能知道,这有很多缺点,因为您会发现所有边缘情况,即您还需要注意环境,您需要检查黑客是否在每个新的情况下仍然有效iOS 版本等。如果您的应用支持 iOS 10,那么情况就不同了,因为 AVPlayerViewController 的 UI 在 iOS 11 中发生了变化。

    有没有一种方法可以使用 UISlider 值更改来刷新速度?

是的,而不是 UIButton 来更改播放速度,只需添加 UISlider

    如果当前正在播放,我们可以更改播放速度吗?

是的,如果它正在播放,那么您只需更改播放器的rate 属性:例如更改为 1.25 X => playerViewController.player?.rate = 1.25

更新:

请求增强! ? 雷达编号为 46022646:Playback speed control for AVPlayerViewController (Video)。

【讨论】:

以上是关于AVPlayerViewController 播放速度的自定义控制的主要内容,如果未能解决你的问题,请参考以下文章

AVPlayerViewController 播放后退出全屏

AVPlayerViewController 播放速度的自定义控制

更改 AVPlayerViewController 的播放控制按钮的颜色

如何在解雇后停止播放 AVPlayerViewController 作为 UIViewRepresentable?

AVPlayerViewController 拒绝加载/播放视频文件/流

AVPlayerViewController 不播放本地视频