gpt4 book ai didi

iphone - AudioSessionSetActive 中断后失败

转载 作者:太空狗 更新时间:2023-10-30 03:33:13 24 4
gpt4 key购买 nike

几周来我一直在努力弄清楚到底发生了什么,但我不知道为什么在中断后我无法继续播放,所以你们可能知道答案。如果我的应用程序在后台播放并且我在不同的应用程序中,则 AudioSessionSetActive(TRUE) 在重新激活时总是返回 '!cat',它是 kAudioSessionIncompatibleCategory。如果我在我的应用程序中遇到中断,它可以正常工作并继续播放。

原始代码实际上将所有 AudioSession 和 AudioQueue 调用都封装在宏中,如果它表示错误则打印 OSStatus,但我将其删除以提高可读性。此外,[self pause] 只是切换暂停,所以基本上它在暂停时调用 AudioQueueStart(audioQueue, NULL) 但如果 AudioSession 失败,它当然不起作用。

Audio Session 初始化代码:

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如果它能以某种方式帮助解决问题..

最佳答案

如果您使用的是 AudioQueue API,则需要执行一些额外的步骤,具体取决于某些因素。我从来没有这样做过,所以我会把解释留给专家:
在 Apple Developer 网站上有一个关于该主题的视频,涵盖了这个确切的问题。 WWDC 2010 session 412 Audio Development for iPhone OS 第 1 部分大约在第 45 分钟,您对此事有很好的解释。

关于iphone - AudioSessionSetActive 中断后失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7922410/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com