ios上的Web音频与音频队列冲突,仅限于设备上
我有一个使用CoreAudio录制音频的Cordova插件。 它处理音频样本,并重放录制的音频,仍然使用CoreAudio。 该应用程序还使用网络音频播放一些音频。
在ios模拟器中一切正常,但在设备上,问题如下所示:记录/重播运行良好,直到对Web音频进行一次调用,在这种情况下,后续一次对CoreAudio的调用失败。
如果我重新使用AudioQueue,并尝试在其停止后(并在使用网络音频播放一些音频后)重新启动它,则AudioQueueStart调用将返回560034163,即“!aqs”。 我找不到这意味着什么。
for (i = 0; i < kNumberBuffers; ++i) {
XThrowIfError(AudioQueueEnqueueBuffer(audioQueue, audioBuffers[i], 0, NULL),
"AudioQueueEnqueueBuffer failed");
}
// That returns !aqs
XThrowIfError(AudioQueueStart(audioQueue, NULL), "AudioQueueStart failed");
或者,如果我在录制停止时放弃队列,那么如果我重新创建一个新的队列,则对AudioQueueStart的调用将返回-50,我读的这意味着某些参数无效。 只有参数是明显创建成功的队列。 同样,只有当我播放网络音频时才会出现此错误。
XThrowIfError(AudioQueueNewInput(&recordFormat, RecordingCallback,
this /* userData */, NULL /* run loop */, NULL /* run loop mode */,
0 /* flags */, &audioQueue), "AudioQueueNewInput failed");
int bufferByteSize = 2 * 1024;
int i;
for (i = 0; i < kNumberBuffers; ++i) {
XThrowIfError(AudioQueueAllocateBuffer(audioQueue, bufferByteSize, audioBuffers[i]),
"AudioQueueAllocateBuffer failed");
XThrowIfError(AudioQueueEnqueueBuffer(audioQueue, audioBuffers[i], 0, NULL),
"AudioQueueEnqueueBuffer failed");
}
XThrowIfError(AudioQueueStart(audioQueue, NULL), "AudioQueueStart failed");
正如我所说,所有这些工作,除非我在设备上,并使用网络音频播放一些音频后,工作良好。 另外,使用另一个AudioQueue播放录制的音频,在播放带有Web音频的音频后仍然可以正常工作。
对发生了什么的任何想法? 或者有关如何进一步调试的想法?
这个问题似乎与需要在AVAudioSessionCategoryPlayAndRecord和AVPlayer中设置的音频会话类别(这可能是内部用于使用媒体插件或网络音频API从URL回放音频的内容)。 显然,AVAudioPlayer没有这样的问题,但我需要在网络上播放文件。
不幸的是,设置
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: nil];
在我的插件没有解决问题,所以我不得不在我的插件中使用AVPlayer实现播放功能,并确保插件初始化时设置了类别。
这些解决了我的问题。 感谢那个SO问题。
链接地址: http://www.djcxy.com/p/79035.html上一篇: Web audio on ios conflicting with audio queue, only on device
下一篇: iOS Cannot play on speaker and set Audio Session to record