MPNowPlayingInfoCenter 在通过播放音频时始终处于“正在播放”状态

Posted

技术标签:

【中文标题】MPNowPlayingInfoCenter 在通过播放音频时始终处于“正在播放”状态【英文标题】:MPNowPlayingInfoCenter always in "playing" state when playing audio through 【发布时间】:2015-04-13 03:54:26 【问题描述】:

我们开发了一个跨平台的多媒体播放器。它使用 OpenAL 播放音频。在 ios 上,我们想使用 MPNowPlayingInfoCenter 和远程控制事件的功能。

设置当前位置,经过时间,其他轨道信息效果很好。但是,不幸的是,当按下信息中心播放器中的暂停按钮时,播放器会暂停,但暂停按钮不会改变其状态。信息中心继续显示播放没有暂停(时间标签继续计数)。

我们这样处理 UIEventSubtypeRemoteControlPause 事件:

[self.player pause]; // Pause playback

// Update MPNowPlayingInfoCenter
NSMutableDictionary *mediaInformation = [NSMutableDictionary dictionaryWithDictionary:[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo];
mediaInformation[MPNowPlayingInfoPropertyPlaybackRate] = @0.0;
mediaInformation[MPNowPlayingInfoPropertyElapsedPlaybackTime] = @(self.player.currentTime);
[MPNowPlayingInfoCenter defaultCenter].nowPlayingInfo = mediaInformation;

MPNowPlayingInfoCenter 是否支持通过 OpenAL 播放音频或者我们错过了什么。

【问题讨论】:

【参考方案1】:

我也遇到了同样的问题,结果发现毕竟和OpenAL无关,而是AVAudioSession的播放类别,看这个栈溢出帖:Is MPNowPlayingInfoCenter compatible with AVAudioPlayer?。

我使用以下代码设置了正确的类别:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *setCategoryError = nil;
BOOL success = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&setCategoryError];

我最初使用withOptions: AVAudioSessionCategoryOptionMixWithOtherssetCategory:AVAudioSessionCategoryPlayback,导致锁屏播放控件不起作用。

【讨论】:

以上是关于MPNowPlayingInfoCenter 在通过播放音频时始终处于“正在播放”状态的主要内容,如果未能解决你的问题,请参考以下文章

MPNowPlayingInfoCenter:从 URL 设置 MPMediaItemArtwork 的最佳方法是啥?

MPNowPlayingInfoCenter - 当音频暂停时,经过的时间不断计数

MPNowPlayingInfoCenter 是不是与 AVAudioPlayer 兼容?

暂停播放时 MPNowPlayingInfoCenter 没有正确反应

MPNowPlayingInfoCenter 在音频流停止时消失

如何在 Swift 3 中正确设置 MPNowPlayingInfoCenter