Аудиоустройства очень низкого уровня и полезны, если вы хотите выполнить тяжелую обработку звука, такую как звуковые эффекты в реальном времени. Насколько я знаю, Audio Units не поддерживает аудиокодек wma. Для этого вам понадобится библиотека FFmpeg.
Поскольку FFmpeg также поддерживает mms, нет необходимости использовать другую библиотеку, такую как libmms, для подключения к аудиопотокам mms. Вы можете подключиться к аудиопотокам MMS с помощью FFmpeg следующим образом:
const char *url = "mmst://somemmsurlhere.com";
avformat_open_input(formatCtx, url, NULL, NULL);
Для декодирования аудиоданных вы можете использовать функцию avcodec_decode_audio3 . Как только вы подготовите декодированные аудиоданные, я предлагаю вам использовать платформу AudioQueue для воспроизведения. AudioQueue работает, вызывая определенные вами функции обратного вызова для запроса аудиоданных. Одной из этих функций обратного вызова является 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);
}
}