在处理AVAudioSessionInterruptionNotification

时间:2016-02-23 10:17:07

标签: ios objective-c xcode avplayer avqueueplayer

在应用程序中,我有一个播放器对象,它具有播放音频文件的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堆栈跟踪。

StackTrace

非常感谢任何帮助。提前谢谢。

0 个答案:

没有答案