在应用程序中,我有一个播放器对象,它具有播放音频文件的AVQueuePlayer属性。在我的播放器对象中,我拥有处理AVAudioSessionInterruptionNotification所需的所有代码,如下所示:
- (void)p_audioSessionInterruption:(NSNotification *)notification
{
NSUInteger interruptionType = [[[notification userInfo] objectForKey:AVAudioSessionInterruptionTypeKey] unsignedIntegerValue];
if (interruptionType == AVAudioSessionInterruptionTypeBegan) {
if (self.isPlaying) {
self.interruptedWhilePlaying = YES;
[self p_pauseAfterInterruption];
}
return;
}
if (interruptionType == AVAudioSessionInterruptionTypeEnded) {
if (self.interruptedWhilePlaying) {
self.interruptedWhilePlaying = NO;
[self p_playAfterInterruption];
}
return;
}
}
self.isPlaying是一个只读属性:
- (BOOL)isPlaying
{
return self.queueplayer.rate != 0;
}
在iOS 8中,这一切似乎都运行得很好。但是在iOS 9中,似乎在处理通知之前调用“某事”并将AVQueuePlayer rate属性更改为0.因此,当检查是否在AVAudioSessionInterruptionTypeBegan情况下播放时,播放器在中断后没有暂停,并且在中断结束时中断的WilePlaying属性为NO,因此不会恢复。
我已经添加了KVO观察来评估AVQueuePlayer的属性,试图找出什么改变了速率,但找不到任何有启发性的东西。我在屏幕截图中提供了observeValueForKeyPath堆栈跟踪。
非常感谢任何帮助。提前谢谢。