当用户选择要播放的新视频时关闭画中画视频
Posted
技术标签:
【中文标题】当用户选择要播放的新视频时关闭画中画视频【英文标题】:Close Picture in Picture video when user choses a new video to play 【发布时间】:2020-01-28 17:28:44 【问题描述】:我正在使用 AVKit 向用户展示视频。
当用户选择一个视频时,它会使用 AVKit 的标准播放器呈现。这使它成为全屏。
如果用户选择将其设为“画中画”,则用户可以继续使用应用程序的其余部分。
这意味着用户可以选择要播放的另一个视频,该视频确实会与前一个视频同时播放(全屏),该视频在画中画中仍然可见。
我想在选择第二个视频时关闭第一个 (PiP) 视频,但是,在启动第二个视频之前,我尝试“关闭”前一个视频,但它不起作用。
我认为这是因为它被显示为画中画,所以 AVPlayerViewController 不再代表它......
有没有办法简单地做到这一点?
如果尝试播放第二个视频,则播放视频时(不工作)尝试终止第一个视频:
func play(FileName filename: String, FileType type: String)
if self.isVideoPlaying == YES
self.playerController!.dismiss(animated: YES, completion: self.isVideoPlaying = NO ; self.play(FileName: filename, FileType: type) )
return
self.isVideoPlaying = YES
let path = Bundle.main.path(forResource: filename, ofType: type)
let url = NSURL(fileURLWithPath: path!)
let player = AVPlayer(url: url as URL)
...
【问题讨论】:
【参考方案1】:好的,我是这样解决的:
在播放视频时设置一个“isAlreadyPlaying: Bool”类属性...但是
在“播放”视频并向 AVPlayerViewController 呈现(新)视频的方法中,请在开头进行此检查:
if self.isAlreadyPlaying == YES
killVideoPlayer()
DispatchQueue.main.asyncAfter(deadline: .now() + 1.5, execute: self.play(FileName: filename, FileType: type) )
return
... Here you put the normal play / present code
在 'killVideoPlayer()' 方法中,将属性 'isAlreadyPlaying' 设置为 NO / false。
即
(仅针对那些还不知道的人),这里是 kill 函数:
private func killVideoPlayer()
self.isAlreadyPlaying = NO
self.playerController?.player?.pause()
self.playerController?.player = nil
let audiosession = AVAudioSession.sharedInstance()
do
try audioSession.setActive(false, options: .notifyOthersOnDeactivation)
try audioSession.setCategory(.soloAmbient)
catch
print("Audio session failed")
self.playerController?.dismiss(animated: YES, completion:
self.playerController = nil
)
【讨论】:
我遇到了同样的问题,我不清楚您的解决方案。你如何真正杀死现有的画中画? @RMoyer 您只需按照 Apple 在其代码/教程中演示的标准方式即可。暂停播放器并清除所有引用并关闭 AVPVC。 @RMoyer 我已经修改了答案以包含一个示例 Kill 方法。 @iOSProgrammingIsFun 你有没有想出另一个不使用计时器的解决方案? @AlejandroCotilla 是的。我上面的回答。以上是关于当用户选择要播放的新视频时关闭画中画视频的主要内容,如果未能解决你的问题,请参考以下文章
向上滑动(将应用程序置于后台)并且视频在自定义 AVPLayer 中播放时如何停止画中画?