我试图弄清楚几周以来实际发生的事情,但我不知道为什么在中断后我无法继续播放,所以你们可能知道答案。如果我的应用程序在后台播放并且我在不同的应用程序中,则在重新激活时,AudioSessionSetActive(TRUE) 始终返回“!cat”,即 kAudioSessionIncompatibleCategory。虽然如果我在我的应用程序中遇到中断,它可以正常工作并继续播放。
原始代码实际上将所有 AudioSession 和 AudioQueue 调用包装在宏中,如果这意味着错误,则会打印 OSStatus,但我将其删除以提高可读性。此外,[self pause] 只是切换暂停,所以基本上它在 upause 时调用 AudioQueueStart(audioQueue, NULL) 但如果 AudioSession 失败,它当然不起作用。
音频会话初始化代码:
AudioSessionInitialize(NULL, NULL, _audioSessionInterruptionListener, self);
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, _audioSessionPropertyListener, self);
AudioSessionSetActive(TRUE);
中断处理程序代码:
- (void)handleInterruptionChangeToState:(AudioQueuePropertyID)inInterruptionState
{
if(inInterruptionState == kAudioSessionBeginInterruption)
{
NSLog(@"+Interruption");
if(self.state == NX_STATE_PLAY)
{
[self pause];
AudioSessionSetActive(FALSE);
isPausedByInterruption = YES;
}
}
else if(inInterruptionState == kAudioSessionEndInterruption)
{
if(isPausedByInterruption)
{
AudioSessionSetActive(TRUE);
[self pause];
isPausedByInterruption = FALSE;
}
NSLog(@"-Interruption");
}
}
这个流媒体源代码可以在这里找到https://bitbucket.org/and/amaudiostreamer/src/122de41fe6c0/AMAudioStreamer/AMAudioStreamer/Classes/NxAudioStreamer.m如果它会以某种方式帮助解决问题..