是否可以强制 AVPlayer 停止在外部播放视频(在 Apple TV 上)

Posted

技术标签:

【中文标题】是否可以强制 AVPlayer 停止在外部播放视频(在 Apple TV 上)【英文标题】:Is it possible to force AVPlayer stop playing video externally (on Apple TV) 【发布时间】:2013-06-26 16:03:01 【问题描述】:

我有一个通过 AVPlayer 通过 HTTP 播放视频的 ios 应用程序。

我有 MPVolumeView,它允许选择播放设备以将当前播放流式传输到。

但现在我需要能够以编程方式停止视频流,并在 iPad 屏幕上的应用程序中继续在 AVPlayer 的视频层上播放。 (就像 MPVolumeView 的按钮一样,但以编程方式)

请帮帮我,我试图自己和谷歌的帮助下找到解决方案,但我无法解决这个问题:(

真的可以吗?

谢谢!

【问题讨论】:

【参考方案1】:

在这种情况下,您不需要直接对多个显示器进行编程。您只需要告诉 iOS 的视频子系统停止使用其他显示器...

AVPlayer 有一个属性allowsExternalPlayback,您可以将其设置为NO。这将禁用外部显示器上的播放。在您的应用程序中播放器的原始AVPlayerLayer 将继续播放。

【讨论】:

我试过了,视频播放在外接显示器上被禁用并继续在 iPad 屏幕上播放,但音频仍然通过外接显示器播放 是的......我也遇到了这个问题。音频仍通过外部显示器播放。您找到解决方案了吗? @AlexanderTkachenko @KarenAnne 不幸的是没有。我有一些想法,通过 AVPlayer 播放“视频”使用 AVAudioSession 播放声音,所以当我们禁用 allowExternalPlayback 时,AVAudioSession 使用它自己的设置并通过外部设备连续播放。我想也许还需要配置 AVAudioSession 来禁用播放。 你们中有人找到解决方案了吗?我遇到了同样的问题,音频一直通过外部显示器播放......谢谢!【参考方案2】:

首先,您必须阅读this 对多显示器编程的参考。

但我认为在这种特定情况下,您正在寻找 [UIScreen screens] ,它返回 NSArrayUIScreen 对象。索引为 0 的UIScreen 是内部显示器,而索引为 1 的UIScreen 是 Apple TV 的显示器。从现在开始,根据this 文档及其示例,您只需要创建一个UIWindow,它具有您要显示的UIScreen 的屏幕属性。然后,您可以轻松地将图层、视图等添加到该 UIWindow。

【讨论】:

感谢Rickye的参考和帮助,这似乎是解决问题的关键,我会尝试使用它,也许它会解决我的问题。绝对值得研究!

以上是关于是否可以强制 AVPlayer 停止在外部播放视频(在 Apple TV 上)的主要内容,如果未能解决你的问题,请参考以下文章

AVPlayer 在在线模式下停止播放 AES 加密的离线 HLS 视频

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

avplayer 和 wkwebview 视频播放

处于暂停状态时如何强制 AVPlayer 暂停缓冲?

用户关闭 AVPlayer 时如何获取视频播放时间

AVPlayer:如何“播放”图像而不是视频?