向上滑动(将应用程序置于后台)并且视频在自定义 AVPLayer 中播放时如何停止画中画?

Posted

技术标签:

【中文标题】向上滑动(将应用程序置于后台)并且视频在自定义 AVPLayer 中播放时如何停止画中画?【英文标题】:How to stop going to picture in picture when swiped up(put the application in background) and video is playing in custom AVPLayer? 【发布时间】:2021-06-03 04:40:06 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

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
        
    


【讨论】:

以上是关于向上滑动(将应用程序置于后台)并且视频在自定义 AVPLayer 中播放时如何停止画中画?的主要内容,如果未能解决你的问题,请参考以下文章

使用后台容器在自定义列表视图上加载动态数据

在自定义视图上处理来自 VoiceOver 的“点击”

applicationDidEnterBackground 和 applicationWillTerminate 都在用户向上滑动退出应用程序时调用

当来电活动置于后台时返回呼叫 UI

如何在自定义滑动(而不是滑动删除)单元格(滑动到邮件/短信)中点击一个单元格时删除在其他 TableView 单元格中添加的子视图

苹果平板app怎么强制退出