2012-09-24 2 views
5

게임에 VOIP을 추가하는 비용이 부과되었으므로 (크로스 플랫폼이므로 Apple gamekit을 사용할 수 없음).녹음하는 동안 오디오 장치 remoteIO 재생

3 일 또는 4 일 동안, 오디오 유닛과 리모컨으로 머리를 감싸려고 노력 중입니다 ... 저는 수십 개의 예제를 간과했지만 그럴 때마다 간단한 알고리즘을 PCM을 입력하고 스피커에서 다시 재생하십시오. Apple의 문서에 따르면 VOIP을 수행하기 위해 kAudioSessionCategory_PlayAndRecord를 사용해야합니다.

UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord; 

     status = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, 
             sizeof(audioCategory), 
             &audioCategory); 
     XThrowIfError(status, "couldn't set audio category"); 

1) 그러나 playAndRecord는 항상 PerformThru 콜백 // aurioTouch를) 마이크에서 나오는 (또는 그 이상 excatly 무엇을 담당 할 것입니다 내가 잘못 오전) 나에게 (것?

은 내가 피어에 데이터를 전송하려는거야 그 콜백에서
static OSStatus PerformThru(
          void      *inRefCon, 
          AudioUnitRenderActionFlags *ioActionFlags, 
          const AudioTimeStamp  *inTimeStamp, 
          UInt32      inBusNumber, 
          UInt32      inNumberFrames, 
          AudioBufferList    *ioData) 
{ 
OSStatus err = AudioUnitRender(THIS->rioUnit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData); 
    if (err) 
     printf("PerformThru: error %d\n", (int)err); 
    return err 
} 

AURender

을 제외한 아무것도하지 않고, 간단한 콜백이 (아니 직접 물론 있지만, 데이터는 그것에서 올 것이다) ...

2 단위, 하나의 레코딩, 하나의 재생을 제외하고는 입력과 다른 출력을 어떻게 재생할 수 있는지 알 수는 없지만 Apple이 의도 한 것으로 보이지는 않습니다 (여전히 문서에 대한 찬성).

물론, 내가 그것에 대해 어떤 문서를 찾을 수 없습니다

는, 오디오 장치는 여전히

누구나 할 수있는 가장 좋은 방법 일 것입니다 무슨에 생각을 할 것이다 ... 유엔 문서화 꽤 많이?

답변

8

VOIP 또는 kAudioSessionCategory_PlayAndRecord를 사용하지 않았습니다. 그러나 마이크에서 픽업 한 음성을 녹음/전송하고 네트워크 패키지에서 들어오는 데이터를 재생하려는 경우 Here은 마이크와 재생을 모두 포함하는 좋은 샘플입니다. 또한 Apple에서이 설명서를 읽지 않은 경우 this을 강력하게 추천합니다.

요약하면 AudioUnits 인스턴스를 만들어야합니다. 이 경우 두 개의 콜백을 구성하십시오. 하나는 마이크 용이고 다른 하나는 재생 용입니다. 콜백 마이크 기능은 마이크에서 가져온 데이터를 제공합니다. 그런 다음 선택한 네트워크 프로토콜을 사용하여 변환하고 다른 장치로 전송할 수 있습니다. 재생 콜백 기능은 재생할 다른 네트워크 장치에서 들어오는 데이터를 제공하는 곳입니다.

+1

검색하는 동안이 샘플을 만들지 않아서 감사합니다. – TheSquad

+0

게시물에 많은 도움을 주셔서 감사합니다. 오랫동안이 문제를 조사해 왔습니다. 이제 내 문제를 해결했습니다. 감사합니다. 새해 첫 해를 기원합니다. –

+1

레코더 오디오 버퍼를 저장하는 방법, 공유해 주시겠습니까? –

0

간단한 예제가 this입니다. 원격 IO 장치를 사용하는 방법을 설명합니다. 이 예를 이해하면 PJSIP's audio driver을보아야합니다. 이것들은 당신 자신의 솔루션을 구현하는데 도움이 될 것입니다. 행운을 빌어 요.

관련 문제