防止 AVPlayerController 接管 MPRemoteCommandCenter

7
我有一个视图控制器,其中包含两个独立的播放器,一个是使用AVAudioPlayer的音频播放器,另一个是使用AVPlayerViewController的视频播放器。
在加载视图时,这两个播放器都被初始化,并且它们的源也被初始化,但它们一直处于暂停状态,直到用户与它们中的一个进行交互。 the two players 我试图使此应用程序能够在后台播放AVAudioPlayer的音频,因此我已经在应用程序的功能中设置了该选项,并且它正在工作,但我遇到了一些主要问题。
第一个问题是由于设置了
AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, mode: .default)

我需要使用背景音频,但同时这也启用了视频在后台播放,而我不希望它这样。有没有什么方法可以防止这种情况发生?

然后,我使用MPRemoteCommandCenter设置锁屏和控制中心的控件,指定当用户与控件交互时,音频播放器应该启动或暂停。如果我只使用音频而从未启动播放器,并在控制中心、锁屏和应用内播放器之间切换,一切正常。

但是,如果我使用AVPlayerViewController开始播放视频,暂停它,启动音频播放器并转到锁屏界面,则命令会被连接到视频,即使视频根本没有播放。(在我编写的控件代码中,没有提及视频播放器(我尝试完全删除代码,依然无济于事)。)

这是预期的行为吗?有没有办法禁用此功能或更改其行为?

TL;DR
我有一个音频播放器和一个视频播放器,只想让音频播放器能在后台播放,但出现了一个问题:MPRemoteCommandCenter的控件优先考虑视频播放器,我想要更改或禁用这种行为。

1个回答

7

如果有任何人尝试解决这个问题,经过一些调整我发现AVPlayerController默认设置属性updatesNowPlayingInfoCentertrue
将其设置为false可以防止我遇到的大多数问题。

我遇到的一个问题是,在播放音频文件然后切换到视频时,关闭应用程序仍然会显示播放器控件,其中混合了音频和视频数据。
通过将AVAudioSession.sharedInstance().categoryambient切换到playback来解决这个问题,当播放音频时再切换回ambient以播放视频。


1
这实际上解决了我遇到的一个无关问题。我只使用 AVPlayerViewController(没有第二个播放器),但我将时间更改侦听器绑定到播放器并手动更新 MPNowPlayingInfoCenter 以设置标题、艺术家、艺术品和其他属性。每当我锁定屏幕,解锁,然后再次锁定时 - 控件就会开始表现不稳定。有时不显示,有时加载 _iTunes_(?!?),有时工作。我设置了这个标志,一切都像魔术般地开始工作! - stevendesu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接