私は Audio Streaming Services ライブラリ (Matt Ghallager のチュートリアルに基づく) を使用してオーディオ ライブのストリーミングに取り組んでいましたが、この部分でクラッシュし続けました。
err = AudioQueueStart(audioQueue, NULL);
if (err)
{
[self failWithErrorCode:AS_AUDIO_QUEUE_START_FAILED];
return;
}
エラー コードは次のとおりです: kAudioDeviceUnsupportedFormatError .. この人物は CoreAudio/AudioHardware.h で定義されています。このエラーに関する有用な情報は、Web 上で見つけることができませんでした。
興味深いのは、以前にこれを試みているときに同様の問題に直面したことです。
// create the audio
err = AudioQueueNewOutput(&asbd, MyAudioQueueOutputCallback, self, NULL, NULL, 0, &
if (err)
{
[self failWithErrorCode:AS_AUDIO_QUEUE_CREATION_FAILED];
return;
}
(この投稿でも同じ問題が発生しましたが、投稿の作成者は誤ってエラー コードをAudioQueueNewOutputではなくAudioQueueStartに帰したとしています)
私はこのエラーコードを受け取りました:kAudioFormatUnsupportedDataFormatError ..私の救済策は、このコードを手動で追加することでした:
asbd.mFormatID = kAudioFormatMPEGLayer3;
その呼びかけを発見してから
AudioFileStreamGetProperty(inAudioFileStream, kAudioFileStreamProperty_DataFormat, &asbdSize, &asbd);
最初に、 kAudioFormatMPEGLayer3 ではなく mFormatID として kAudioFormatMPEGLayer1 を与えました。これは、実際に再生しているオーディオ ファイルである .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));
ご覧のとおり.. じゅうたんの下に押し込んでいた問題がついに私を悩ませようとしています.. しかし、パーサーが私のオーディオファイルタイプを手動で認識できない理由がわかりません.. なぜ維持しなければならないのか..その値をハードコーディングすると..最後に失敗するだけです。