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: AVAudioSessionCategoryOptionMixWithOthers
和setCategory:AVAudioSessionCategoryPlayback
,导致锁屏播放控件不起作用。
【讨论】:
以上是关于MPNowPlayingInfoCenter 在通过播放音频时始终处于“正在播放”状态的主要内容,如果未能解决你的问题,请参考以下文章
MPNowPlayingInfoCenter:从 URL 设置 MPMediaItemArtwork 的最佳方法是啥?
MPNowPlayingInfoCenter - 当音频暂停时,经过的时间不断计数
MPNowPlayingInfoCenter 是不是与 AVAudioPlayer 兼容?
暂停播放时 MPNowPlayingInfoCenter 没有正确反应