使用音频队列处理中断

时间:2009-03-23 13:35:34

标签: iphone audio streaming

我正在开发一个音频流媒体并且已经宣布中断监听器以在发生中断时保存歌曲的状态 - 如来电或短信。

以下是相关代码

在我的AppDelegate中,我有这个

AudioSessionInitialize (NULL, NULL, interruptionListenerCallback, self);
AudioSessionSetActive(YES);

这就是中断监听器的样子

void interruptionListenerCallback (void *inUserData, UInt32 interruptionState) {
// This callback, being outside the implementation block, needs a reference 
//to the AudioPlayer object
MyPlayer *player = (MyPlayer *)inUserData;

if (interruptionState == kAudioSessionBeginInterruption) {
    if ([player audioStreamer]) {
        // if currently playing, pause
        [player pausePlayback];
        player.interruptedOnPlayback = YES;
    }

} else if ((interruptionState == kAudioSessionEndInterruption) && player.interruptedOnPlayback) {
    // if the interruption was removed, and the app had been playing, resume playback
    [player resumePlayback];
    player.interruptedOnPlayback = NO;
}

}

当我接到电话时,会调用中断监听器,如果用户拒绝该呼叫,也会调用回放恢复方法。但是在调用resumePlayback方法之前,我在AudioQueueEnqueueBuffer的控制台中收到此错误

  

错误: tca!错误int: 560030580

有人知道如何在流式传输音频文件时正确处理音频中断。

感谢。

3 个答案:

答案 0 :(得分:3)

此链接显示问题所在。可以帮助别人。

https://devforums.apple.com/message/31758#31758

答案 1 :(得分:2)

!act是在AudioServices.h中声明的kAudioSessionNotActiveError,带有注释

“操作失败,因为AudioSession未激活。首先调用AudioSessionSetActive(true)将在大多数情况下修复此错误。”

在中断后调用AudioQueueStart()时也会出现此错误(正如我今天发现的那样)。

答案 2 :(得分:0)

在我看来,您将inUserData设置为appDelegate而不是播放器。