オーディオユニットがiPhoneのストリーミングオーディオシナリオでコーデックとして機能できるかどうかはわかりません。
私はそれができることをさまざまな場所で読んだことがありますが、そのための例や適切なドキュメントを見たことがありません。代わりに、リリースされたアプリのほとんどがffmpegとlibmmsを利用していることがわかりました。
私はあなたが私に与えることができるどんな助けにも感謝します。
オーディオユニットがiPhoneのストリーミングオーディオシナリオでコーデックとして機能できるかどうかはわかりません。
私はそれができることをさまざまな場所で読んだことがありますが、そのための例や適切なドキュメントを見たことがありません。代わりに、リリースされたアプリのほとんどがffmpegとlibmmsを利用していることがわかりました。
私はあなたが私に与えることができるどんな助けにも感謝します。
オーディオユニットは非常に低レベルであり、リアルタイムオーディオエフェクトのような重いオーディオ処理を行いたい場合に便利です。私の知る限り、AudioUnitsはwmaオーディオコーデックをサポートしていません。これにはFFmpegライブラリを使用する必要があります。
FFmpegはmmsもサポートしているため、mmsオーディオストリームに接続するためにlibmmsなどの別のライブラリを使用する必要はありません。次のようにFFmpegでmmsオーディオストリームに接続できます。
const char *url = "mmst://somemmsurlhere.com";
avformat_open_input(formatCtx, url, NULL, NULL);
オーディオデータをデコードするには、avcodec_decode_audio3関数を使用できます。デコードされたオーディオデータの準備ができたら、AudioQueueフレームワークを使用して再生することをお勧めします。AudioQueueは、オーディオデータを要求するために定義したコールバック関数を呼び出すことによって機能します。これらのコールバック関数の1つは、次のようにデコードされたオーディオデータを渡すことができるAudioQueueOutputCallbackです。
- (void)handlePlayCallback:(AudioQueueRef) inAudioQueue buffer:(AudioQueueBufferRef) inBuffer {
// copy decoded audio data to inBuffer->mAudioData
// and set the size of the copied data like this
// inBuffer->mAudioDataByteSize = data_written
if(inBuffer->mAudioDataByteSize > 0) {
AudioQueueEnqueueBuffer(inAudioQueue, inBuffer, 0, NULL);
}
}
これをもう一度見てみると、iOSではMac OS Xとは異なり、組み込みのオーディオユニットしか使用できないようです。組み込みのオーディオユニットについては、「iOS用オーディオユニットホスティングガイド」->「特定のオーディオユニットの使用」で説明しています。ここでオンラインで見つけることができます。