службы потокового аудио не могут распознать тип файла
Я работал над потоковой передачей аудио в прямом эфире с помощью библиотеки Audio Streaming Services (на основе материалов Мэтта Галлагера).руководство) и я продолжал сбой в этой части:
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;
}
(та же проблема, с которой сталкиваются вэтот сообщение, но автор сообщения ошибочно приписал свой код ошибки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));
в первый раз я не предоставил inFileTypeHint дляфункция это привело к
AudioFileStreamParseBytes(streamer->audioFileStream, inDataByteSize, inData, 0);
вызов, чтобы не анализировать байты .. (в частности .. Я получилParse bytes failed. err: typ? 1954115647 сообщение об ошибке, которое kAudioFileUnsupportedFileTypeError) ..
как я обошел это, как вы уже догадались, вручную добавив подсказку типа файла:
streamer->err = AudioFileStreamOpen((__bridge void*)streamer, ASPropertyListenerProc, ASPacketsProc,
kAudioFileMP3Type, &(streamer->audioFileStream));
так что вы можете видеть ... проблема, которую я "толкнул под коврик", наконец-то появилась, чтобы укусить меня ... но я не уверен, почему парсер не может распознать мой тип аудиофайла вручную ... и почему я должен сохранить на жестком кодировании этого значения .. только чтобы оно не получилось в конце.