音频流服务无法识别文件类型

时间:2012-08-22 15:21:15

标签: ios audio-streaming

我正在使用音频流服务库(基于Matt Ghallager的tutorial)实时流式传输音频,并且我一直在这部分崩溃:

err = AudioQueueStart(audioQueue, NULL);
if (err)
{
    [self failWithErrorCode:AS_AUDIO_QUEUE_START_FAILED];
    return;
}

错误代码是:kAudioDeviceUnsupportedFormatError ..这个人在CoreAudio / AudioHardware.h中定义,这似乎是与硬件相关的问题。我在网上找不到有关此错误的有用信息。

有趣的是,早些时候我在尝试这个时遇到了类似的问题:

// create the audio 
err = AudioQueueNewOutput(&asbd, MyAudioQueueOutputCallback, self, NULL, NULL, 0, &
    if (err)
{
    [self failWithErrorCode:AS_AUDIO_QUEUE_CREATION_FAILED];
    return;
}

this帖子中遇到同样的问题,但该帖子的作者错误地将其错误代码归因于 AudioQueueStart 而不是 AudioQueueNewOutput

我收到了此错误代码:kAudioFormatUnsupportedDataFormatError ..我的补救措施是手动添加此代码:

asbd.mFormatID = kAudioFormatMPEGLayer3;

因为我发现了调用

AudioFileStreamGetProperty(inAudioFileStream, kAudioFileStreamProperty_DataFormat, &asbdSize, &asbd);

最初给了我kAudioFormatMPEGLayer1作为mFormatID而不是kAudioFormatMPEGLayer3,这是我实际播放的音频文件.mp3。

最后..可能是我第一次发现错误的时候是我最初调用这个函数的时候:

AudioFileStreamOpen((__bridge void*)streamer, ASPropertyListenerProc, ASPacketsProc, 
                                        0, &(streamer->audioFileStream));

我第一次没有向function提供inFileTypeHint导致

AudioFileStreamParseBytes(streamer->audioFileStream, inDataByteSize, inData, 0);

调用无法解析字节..(具体是..我得到解析字节失败.err:typ?1954115647 错误消息,即kAudioFileUnsupportedFileTypeError)..

我绕过的方式是(你猜对了)手动添加文件类型提示:

    streamer->err = AudioFileStreamOpen((__bridge void*)streamer, ASPropertyListenerProc, ASPacketsProc, 
                                        kAudioFileMP3Type, &(streamer->audioFileStream));

所以你可以看到..我在地毯下推的一个问题终于要来咬我了..但我不知道为什么解析器无法手动识别我的音频文件类型..为什么我必须继续对这个值进行硬编码..只是为了让它最终失败。

1 个答案:

答案 0 :(得分:0)

事实证明,我的数据包没有以正确的顺序出现(也没有完成)...我想通过使用十六进制程序(hexFiend)来打开有问题的mp3文件,然后我将密钥包与实际发送的内容进行比较..我修正了这种差异,之后一切正常。