службы потокового аудио не могут распознать тип файла

Я работал над потоковой передачей аудио в прямом эфире с помощью библиотеки 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));

так что вы можете видеть ... проблема, которую я "толкнул под коврик", наконец-то появилась, чтобы укусить меня ... но я не уверен, почему парсер не может распознать мой тип аудиофайла вручную ... и почему я должен сохранить на жестком кодировании этого значения .. только чтобы оно не получилось в конце.

Ответы на вопрос(1)

Ваш ответ на вопрос