Chcę przesłać dane audio z mikrofonu przez łączność wielościeżkową (iOS 8) i odtwarzać je przez głośnik uczestnika odbierającego. Ustawiłem również AVAudioEngine i słyszę dane mikrofonu z (górnego) wyjścia głośnikowego, ale nie wiem, jak wysłać AVAudioPCMBuffer przez sieć. Oto mój fragment kodu:iOS8 AVAudioEngine w jaki sposób wysyłać dane mikrofonowe przez łącze Multipeer?
AVAudioInputNode *inputNode =[self.engine inputNode];
AVAudioMixerNode *mainMixer = [self.engine mainMixerNode];
[self.engine connect:inputNode to:mainMixer format:[inputNode inputFormatForBus:0]];
[mainMixer installTapOnBus:0 bufferSize:4096 format:[mainMixer outputFormatForBus:0]
block:^(AVAudioPCMBuffer *buffer, AVAudioTime *when) {
//==== How to send the PCMBuffer ?? ======//
}];
NSError *error = nil;
[self.engine startAndReturnError:&error];
if(error)
{
NSLog(@"error: %@", [error localizedDescription]);
}
Czy wysłać go jako NSData lub NSStream?
Doceń pomoc. Dzięki.
Cześć Michał, thx fo odpowiedzi. MCSessionDelegate ma tę metodę: session: didReceiveStream: withName: fromPeer: Czy możliwe jest wysłanie danych jako strumienia? ponieważ to ciągły przepływ danych. Co oznacza "wystarczająco długi czas"? Dzięki. –
Myślałem, że pytasz tylko o nadawcę. Dodałem rzeczy odbierające. Na drugie pytanie upraszczam: jeśli dane audio docierają szybciej do odbiornika niż może obsłużyć połączenie Bluetooth; to miałem na myśli "przedział czasowy". –
Cześć Michael, thx za szybką odpowiedź. Wybacz mi ... Miałem na myśli startStreamWithName: toPeer: error :, didReceiveStream jest częścią odbierającą. Próbowałem wysyłać i odbierać przy użyciu NSData, ale mam problem po stronie odbiorczej. Wysyłam używając [NSData dataWithBytes: buffer.floatChannelData length: buffer.frameLength], jak mogę przekonwertować odebrane dane bajtów z powrotem na AVAudioPCMBuffer? Ponieważ użyję AVAudioPlayerNode do odtworzenia bufora. W dokumentach Apple nie ma "ustawnika" dla pliku buffer.floatChannelData. –