我正在开发一个既有音频流也有从文件播放音频的项目。对于音频流我正在使用AudioStreamer并从文件播放我正在使用avaudioplayer。 只要应用程序不被电话或短信中断,流媒体和播放都可以正常工作。但是当我尝试重新启动流式传输时解除呼叫后出现呼叫/短信时,我收到错误“音频队列启动失败”。只有当我使用avaudioplayer至少一次并且之后使用流式传输时才会发生这种情况。如果未创建avaudioplayer对象,则在此方案中,在解除呼叫后恢复流式传输没有问题。我的猜测是,audioqueue有些问题。
非常感谢帮助。
我目前使用的代码如下所示
void interruptionListenerCallback (void *inUserData, UInt32 interruptionState) {
// This callback, being outside the implementation block, needs a reference
//to the AudioPlayer object
AudioStreamer *player = (AudioStreamer *)[streamerArray objectAtIndex:0];
if (interruptionState == kAudioSessionBeginInterruption) {
NSLog(@"kAudioSessionBeginInterruption 1");
[player pause];
interruptedOnPlayback = YES;
} else if (interruptionState == kAudioSessionEndInterruption) {
NSLog(@"kAudioSessionEndInterruption 2");
AudioSessionSetActive( true );
[player start];
interruptedOnPlayback = NO;
}
}
你可以看到我正在使用AudioSessionSetActive(true),只要没有创建avaudioplayer对象,它就可以正常工作。只有当我在创建Avaudioplayer对象后使用流光并且应用程序被电话中断时,才会出现此问题 或短信我收到错误音频队列启动失败?!
答案 0 :(得分:2)
我有同样的问题,更详细的错误信息是“hwiu”(硬件在使用中)或1752656245.但我在启动audioStreamer之前使用MPMoviePlayerController
。
我只需要在MPMoviePlayerController
方法中释放它之前停止moviePlayBackDidFinish
([moviePlayer stop])。
停止应释放一些硬件组件。
我希望它有所帮助
答案 1 :(得分:0)
您需要在中断后自行激活音频会话。
我不知道AVAudioPlayer,但如果你直接使用音频队列服务,你可能会有这样的东西作为你的中断处理程序:
void interruptionListener(void * inClientData, UInt32 inInterruptionState) {
if (inInterruptionState == kAudioSessionEndInterruption) {
OSStatus rc = AudioSessionSetActive(true);
if (rc) {
NSLog(@"AudioSessionSetActive(true) returned %d", rc);
}
}
}
并将其传递给您的AudioSessionInitialize()调用。
您也可以懒惰地重启会话:
-(void)startPlaying {
OSStatus rc = AudioQueueStart(queue, NULL);
if (rc) {
NSLog(@"startPlaying AudioQueueStart returned %d.", rc);
if (rc == kAudioSessionNotActiveError) {
rc = AudioSessionSetActive(true);
if (rc) {
NSLog(@"startPlaying - AudioSessionSetActive(true) returned %.d", rc);
} else {
NSLog(@"startPlaying - restarted Audio Session");
}
}
}
}