首页 > 解决方案 > 向上滑动(将应用程序置于后台)并且视频正在自定义 AVPLayer 中播放时,如何停止画中画?

问题描述

我正在开发支持画中画的视频播放器。我在该播放器上播放广告和视频内容。当播放器播放广告时,我想限制从设备向上滑动(将应用程序置于后台)时的自动画中画。一旦广告完成,我想让它在应用程序进入后台时进入画中画。我AVPlayer在我的自定义播放器和AVPictureInPictureController画中画支持中使用。

我找到了一个相关的解决方案AVPlayerViewController,其中.allowsPictureInPicturePlayback属性允许禁用画中画。但我没有找到任何属性AVPlayerAVPlayerLayer限制画中画。

请分享处理这种情况的可能解决方案。提前致谢。

标签: iosswiftavplayeravplayerlayerpicture-in-picture

解决方案


AVPictureInPictureController负责在您的应用程序置于后台时自动显示 PIP,而带有 AVPlayerLayer 的 AVPlayer 没有任何设置来管理它。这样您就可以在画面控制器中创建画面,只有在允许显示 PIP 时才能创建画面,否则在画面控制器中进行销毁。

例如,您可以在视图控制器中创建一个属性来打开和关闭图片控制器中的图片:

var pipController: AVPictureInPictureController?

var allowsPictureInPicturePlayback: Bool = false {
    didSet {
        guard AVPictureInPictureController.isPictureInPictureSupported() else { return }
        
        if allowsPictureInPicturePlayback {
            pipController = AVPictureInPictureController(playerLayer: playerLayer)
            pipController?.delegate = self
        }
        else {
            pipController = nil
        }
    }
}


推荐阅读