我想通过Multipeer Connectivity(iOS 8)发送麦克风音频数据,并通过接收对等体的扬声器播放。我还设置了AVAudioEngine,我可以听到(上方)扬声器输出的麦克风数据,但我不知道如何通过网络发送AVAudioPCMBuffer。这是我的代码片段:
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]);
}
我是以NSData还是NSStream发送的?
感谢您的帮助。 THX。
答案 0 :(得分:0)
我还没有尝试过这个解决方案:
- (NSOutputStream *)startStreamWithName:(NSString *)streamName
toPeer:(MCPeerID *)peerID
error:(NSError **)error
您可以使用property buffer.floatChannelData
接收浮点数组。现在您可以将此float数组打包到NSOutputStream
并发送它。
在客户端,您可以尝试接收流:
- (void)session:(MCSession *)session
didReceiveStream:(NSInputStream *)stream
withName:(NSString *)streamName
fromPeer:(MCPeerID *)peerID
{
stream.delegate = self;
[stream scheduleInRunLoop:[NSRunLoop mainRunLoop]
forMode:NSDefaultRunLoopMode];
[stream open];
}
但在尝试之前,您可以尝试发送随机值(因此white noise)而不是float数组,这样您就可以确保发送这些缓冲区的时间段(我们谈论的是真实的)时间足够宽。
更新15.10.2014 我找到了你需要的东西: http://robots.thoughtbot.com/streaming-audio-to-multiple-listeners-via-ios-multipeer-connectivity