Ich möchte Mikrofon-Audiodaten über Multipeer Connectivity (iOS 8) senden und über den Lautsprecher des empfangenden Peers abspielen. Ich habe auch die AVAudioEngine eingerichtet und ich kann die Mikrofondaten von der (oberen) Lautsprecherausgabe hören, aber ich weiß nicht, wie man AVAudioPCMBuffer über das Netzwerk sendet. Hier ist mein Code-Schnipsel:iOS8 AVAudioEngine Senden von Mikrofondaten über Multipeer Connectivity?
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]);
}
Schicke ich es als NSData oder NStream?
Schätzen Sie für die Hilfe. Danke.
Hallo Michael, thx fo die Antwort. MCSessionDelegate hat diese Methode: session: didReceiveStream: withName: fromPeer: Ist es möglich, die Daten stattdessen als Stream zu senden? da es einen kontinuierlichen Datenfluss gibt. Und was bedeutet "Zeitschlitz ist breit genug"? Danke. –
Ich dachte, du fragst nur nach dem Absender. Ich habe den Empfänger hinzugefügt. Für die zweite Frage vereinfache ich: wenn die Audiodaten schneller zum Empfänger kommen als die Bluetooth-Verbindung; das meinte ich mit "Zeitfenster". –
Hallo Michael, danke für die schnelle Antwort. Verzeih mir ... ich meinte startStreamWithName: toPeer: error :, didReceiveStream ist der empfangende Teil. Ich habe versucht, mit NSData zu senden und zu empfangen, aber ich habe ein Problem auf der Empfängerseite. Ich sende mit [NSData dataWithBytes: buffer.floatChannelData length: buffer.frameLength], wie konvertiere ich die empfangenen Bytes Daten zurück zu AVAudioPCMBuffer? Da ich AVAudioPlayerNode verwenden werde, um den Puffer wiederzugeben. In den Apple-Dokumenten gibt es keinen 'Setter' für buffer.floatChannelData. –