【发布时间】:2011-01-28 01:59:42
【问题描述】:
我正在开发一个使用音频流的应用程序。对于来自互联网的流式音频,我正在使用 AudioStreamer 类。音频流媒体有 四种状态 isPlaying 、 isPaused 、isWaiting 和 isIdle 。我的问题是,当音频流媒体处于“isWaiting”状态时,如果我接到电话音频队列失败,则会出现错误“音频队列启动失败”。任何对此有解决方案?帮助....
【问题讨论】:
标签: iphone
我正在开发一个使用音频流的应用程序。对于来自互联网的流式音频,我正在使用 AudioStreamer 类。音频流媒体有 四种状态 isPlaying 、 isPaused 、isWaiting 和 isIdle 。我的问题是,当音频流媒体处于“isWaiting”状态时,如果我接到电话音频队列失败,则会出现错误“音频队列启动失败”。任何对此有解决方案?帮助....
【问题讨论】:
标签: iphone
中断(例如接听电话)将停用音频会话。您可以在中断处理程序中通过调用 AudioSessionSetActive(true) 重新激活音频会话。
查看here 了解中断处理程序的详细信息。
话虽如此,我假设您使用的是mattgallagher's library。要做的事情是在 AudioStreamer.m 的第 949 行("err = AudioQueueStart(audioQueue, NULL);" in -[AudioStreamer pause] 之后的行)中放置一个断点。
如果 err == kAudioSessionNotActiveError 那么我的理论是正确的,您需要调用重新启动音频会话。也许是这样的(但我只看过这段代码,所以也许有更好的解决问题的方法):
else if (state == AS_PAUSED)
{
err = AudioQueueStart(audioQueue, NULL);
if (err) {
err = AudioSessionSetActive(true);
if (err) {
[self failWithErrorCode:AS_AUDIO_QUEUE_START_FAILED];
return;
} else {
err = AudioQueueStart(audioQueue, NULL);
if (err) {
[self failWithErrorCode:AS_AUDIO_QUEUE_START_FAILED];
return;
}
}
}
}
【讨论】: