audiostream服务无法识别文件types

我正在使用audiostream媒体服务库(基于Matt Ghallager的教程 )现场直播audio,我一直在这个部分崩溃:

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

错误代码是: kAudioDeviceUnsupportedFormatError ..这个人在CoreAudio / AudioHardware.h中定义,这似乎是一个硬件相关的问题。 我无法find关于networking上这个错误的很多有用的信息。

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

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

(在这篇文章面临同样的问题,但作者的post错误地将其错误代码归因于AudioQueueStart而不是AudioQueueNewOutput

我得到这个错误代码: kAudioFormatUnsupportedDataFormatError ..和我的补救措施是手动添加此代码:

 asbd.mFormatID = kAudioFormatMPEGLayer3; 

因为我发现那叫

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

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

最后..也许是我第一次注意到有什么错误的时候我最初调用这个函数:

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

我第一次没有提供inFileTypeHint 函数的结果

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

调用无法parsing的字节..(具体来说..我得到了parsing字节失败。错误:typ?1954115647错误消息,这是kAudioFileUnsupportedFileTypeError)..

我得到的方式是(你猜对了)手动添加文件types提示:

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

所以你可以看到..我已经推到地毯下的问题终于来咬我..但我不知道为什么parsing器无法手动识别我的audio文件types..为什么我必须保持在硬编码的价值..只有在最后失败。

事实certificate,我的数据包没有按照正确的顺序(也没有完成)。我想通过使用hex程序(hexFiend)来打开有问题的mp3文件,然后比较关键数据包与什么实际上被发送过来..我修正了这种差异,一切工作正常后。