Tôi muốn gửi dữ liệu âm thanh micrô qua Kết nối đa năng (iOS 8) và phát qua loa của người nhận. Tôi cũng đã thiết lập AVAudioEngine và tôi có thể nghe thấy dữ liệu micrô từ đầu ra loa (trên), nhưng tôi không biết cách gửi AVAudioPCMBuffer qua mạng. Đây là đoạn mã của tôi:iOS8 AVAudioEngine cách gửi dữ liệu micrô qua kết nối 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]);
}
Tôi có gửi nó dưới dạng NSData hoặc NSStream không?
Đánh giá cao sự trợ giúp. Cám ơn.
Hi Michael, thx fo câu trả lời. MCSessionDelegate có phương thức này: session: didReceiveStream: withName: fromPeer: Có thể gửi dữ liệu dưới dạng luồng không? vì đó là luồng dữ liệu liên tục. Và, 'khe thời gian đủ rộng' nghĩa là gì? Cám ơn. –
Tôi nghĩ bạn đã hỏi về người gửi. Tôi đã thêm nội dung người nhận. Đối với câu hỏi thứ hai, tôi đơn giản hóa: nếu dữ liệu âm thanh đến nhanh hơn với người nhận hơn kết nối Bluetooth có thể xử lý; điều này tôi có nghĩa là bởi 'khe thời gian'. –
Xin chào Michael, thx cho câu trả lời nhanh chóng. Xin lỗi ... tôi có nghĩa là startStreamWithName: toPeer: error :, didReceiveStream là phần nhận. Tôi đã thử gửi và nhận bằng NSData, nhưng tôi đã gặp sự cố ở phía bên nhận. Tôi gửi bằng cách sử dụng [dữ liệu NSDataWithBytes: buffer.floatChannelData length: buffer.frameLength], làm cách nào để chuyển đổi dữ liệu byte đã nhận trở lại thành AVAudioPCMBuffer? Vì tôi sẽ sử dụng AVAudioPlayerNode để phát lại bộ đệm. Trong tài liệu của Apple, không có 'setter' cho buffer.floatChannelData. –