Jac*_*art 5 core-audio avfoundation nsstream multipeer-connectivity ios8
我想通过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]);
}
Run Code Online (Sandbox Code Playgroud)
我是以NSData还是NSStream发送的?
感谢您的帮助.谢谢.
我没有尝试过这个解决方案:
- (NSOutputStream *)startStreamWithName:(NSString *)streamName
toPeer:(MCPeerID *)peerID
error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)
您可以使用属性buffer.floatChannelData
接收浮点数组。现在您可以将此浮点数组打包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];
}
Run Code Online (Sandbox Code Playgroud)
但在尝试此操作之前,您可以尝试发送随机值(因此是白噪声)而不是浮点数组,这样您就可以确保发送这些缓冲区的时隙(我们正在谈论实时)足够宽。
更新 15.10.2014 我找到了你所需要的: http://robots.thoughtbot.com/streaming-audio-to-multiple-listeners-via-ios-multipeer-connectivity
归档时间: |
|
查看次数: |
2006 次 |
最近记录: |