Pracuję nad jedną aplikacją, w której muszę przechodzić przez przechwytywanie audio przez wyjściowe gniazdo audio w tym samym czasie nagrywać i zapisywać wideo.Przechodzenie przez dane CMSampleBufferRef do gniazda wyjściowego audio
Sprawdziłem kod przykładowy jabłka aurio touch i zaimplementowałem przekazywanie dźwięku.
Mam również zaimplementowane nagranie wideo przez AVCaptureSession
. Powyższe funkcje funkcjonują indywidualnie i działają perfekcyjnie.
Ale po scaleniu funkcji przejścia audio przez nie działa z powodu sesji audio z AVCapturesession
.
Próbowałem również przekazać dane audio, które otrzymuję z metod delegatów AVCaptureSession
. Poniżej znajduje się mój kod:
OSStatus err = noErr;
AudioBufferList audioBufferList;
CMBlockBufferRef blockBuffer;
CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, NULL, &audioBufferList, sizeof(audioBufferList), NULL, NULL, 0, &blockBuffer);
CMItemCount numberOfFrames = CMSampleBufferGetNumSamples(sampleBuffer); // corresponds to the number of CoreAudio audio frames
currentSampleTime += (double)numberOfFrames;
AudioTimeStamp timeStamp;
memset(&timeStamp, 0, sizeof(AudioTimeStamp));
timeStamp.mSampleTime = currentSampleTime;
timeStamp.mFlags |= kAudioTimeStampSampleTimeValid;
AudioUnitRenderActionFlags flags = 0;
aurioTouchAppDelegate *THIS = (aurioTouchAppDelegate *)[[UIApplication sharedApplication]delegate];
err = AudioUnitRender(self.rioUnit, &flags, &timeStamp, 1, numberOfFrames, &audioBufferList);
if (err) { printf("PerformThru: error %d\n", (int)err); }
Ale to daje błąd. Proszę doradzić, co można zrobić dalej, tak szybko, jak to możliwe. Zajrzałem do tak wielu dokumentów i tak wielu kodów, ale nie mogłem znaleźć żadnego rozwiązania. Proszę pomóc ..