2010-03-15 3 views
2

iPhone의 스트리밍 오디오 시나리오에서 오디오 장치가 코덱으로 작동 할 수 있는지 확실하지 않습니다.iPhone의 오디오 장치를 사용하여 MMS + WMA2 스트림을 디코딩 할 수 있습니까?

나는 그것을 할 수있는 곳을 여러 곳에서 읽었지만 그것에 대한 예제 나 적절한 문서를 보지 못했다. 대신, 나는 대부분의 앱이 ffmpeg와 libmms를 사용하고 있음을 발견했다.

저에게 도움을 주셔서 감사합니다.

답변

0

iOS는 Mac OS X과 달리 내장 오디오 장치 만 허용합니다. 내장 오디오 장치는 "iOS 용 오디오 장치 호스팅 가이드"에서 설명합니다. -> "특정 오디오 사용 단위 "는 온라인 here에서 찾을 수 있습니다.

5

오디오 장치는 매우 낮은 레벨이며 실시간 오디오 효과와 같이 무거운 오디오 처리를 수행하려는 경우에 유용합니다. 오디오 유닛은 wma 오디오 코덱을 지원하지 않습니다. 이 경우 FFmpeg 라이브러리를 사용해야합니다.

FFmpeg도 mms를 지원하므로 mmmm 오디오 스트림에 연결하기 위해 libmms와 같은 다른 라이브러리를 사용할 필요가 없습니다. 당신은 이런 식으로는 FFmpeg 오디오 스트림을 MMS에 연결할 수 있습니다

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); 
    } 
} 
관련 문제