我有一个带有两个单独播放器的 View Controller ,一个带有AVAudioPlayer的音频播放器和一个带有AVPlayerViewController的视频播放器。
加载 View 后,两个播放器也会同时初始化其源,但会保持暂停状态,直到用户与其中一个交互。
我试图使该应用程序能够在后台播放来自AVAudioPlayer的音频,因此我在该应用程序的功能中设置了该选项,并且该功能可以正常工作,但是我遇到了一些主要问题。
第一个问题是由于设置
AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, mode: .default)
这是背景音频所必需的,但是它也使视频也可以在背景中播放,这不是我想要的。有什么办法可以防止这种情况吗?
然后,我使用MPRemoteCommandCenter设置“锁定屏幕和控制中心”的控件,指定当用户与控件交互时,音频播放器应启动或暂停。
如果我只使用音频而没有启动播放器并在Control Center,Lockscreen和应用程序内播放器之间切换,则一切正常。
但是,如果我开始使用AVPlayerViewController播放视频,将其暂停,启动音频播放器并转到Lockscreen,即使该视频甚至没有播放,命令也会连接到该视频。
在为控件运行的代码中,我没有提到视频播放器(我也尝试过完全删除代码,但没有运气)。
那是预期的行为吗?有什么方法可以禁用此功能吗?
TL; DR
我有一个音频和一个视频播放器,并且只希望音频播放器能够在后台播放,但是由于某些原因,MPRemoteCommandCenter的控件将优先级赋予了视频播放器,因此我想更改/禁用此行为。
最佳答案
好吧,对于任何尝试解决此问题的人,经过一番摆弄之后,我发现AVPlayerController的属性updatesNowPlayingInfoCenter
默认设置为 true 。
将其设置为,将设置为false可以防止我遇到的大多数问题。
我一直遇到的一个问题是,当播放音频文件然后切换到视频时,关闭该应用程序仍会显示播放器控件,并且音频和视频中都混有数据。
我通过在播放音频时将AVAudioSession.sharedInstance().category
从ambient
切换到playback
并在播放视频时切换回ambient
来解决此问题。
关于ios - 防止AVPlayerController劫持MPRemoteCommandCenter,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53654679/