如何通过套接字或框架将音频从 iPhone 的麦克风流式传输到 Mac/PC?

Posted

技术标签:

【中文标题】如何通过套接字或框架将音频从 iPhone 的麦克风流式传输到 Mac/PC?【英文标题】:How can I stream audio from the microphone of an iPhone to a Mac/PC via sockets or a framework? 【发布时间】:2012-03-22 02:42:28 【问题描述】:

如何将音频从 iPhone 的麦克风流式传输到 Mac/PC?是否已经有一些框架,或者我可以通过套接字发送音频。不过,我是套接字新手。基本上,我希望能够对着 iPhone 讲话,并且计算机将接收 iPhone 的麦克风输入作为其自己的麦克风输入,用于没有麦克风的计算机。我已经有一个应用程序可以与 Mac 建立 bonjour 连接,它运行一个非常简单的服务器,iPhone 可以向计算机发送文本,但 iPhone 怎么能从麦克风向它发送音频、实时音频呢?

【问题讨论】:

【参考方案1】:

您需要结合使用 AVCaptureSession 和 AVCaptureDevice 才能从麦克风读取数据 - 请参阅 AV Foundation 编程指南。 http://developer.apple.com/library/ios/#DOCUMENTATION/AVFoundation/Reference/AVCaptureAudioDataOutput_Class/Reference/Reference.html#//apple_ref/occ/cl/AVCaptureAudioDataOutput

获取使用套接字的链接

@interface Client : NSObject 
    NSInputStream *_inputStream;
    NSOutputStream *_outputStream;


@implementation Client

- (void)initNetworkCommunication 
    CFReadStreamRef readStream;
    CFWriteStreamRef writeStream;
    CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"localhost", 50000, &readStream, &writeStream);

    _inputStream = (__bridge NSInputStream *)readStream;
    _outputStream = (__bridge NSOutputStream *)writeStream;

    [_inputStream setDelegate:self];
    [_outputStream setDelegate:self];

    [_inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [_outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

    [_inputStream open];
    [_outputStream open];


// send data to server


- (IBAction)onSendButtonTapped:(id)sender 
    NSString *command = self.commandField.text;
    NSData *data = [[NSData alloc] initWithData:[command dataUsingEncoding:NSUTF8StringEncoding]];
    [_outputStream write:[data bytes] maxLength:[data length]];

【讨论】:

以上是关于如何通过套接字或框架将音频从 iPhone 的麦克风流式传输到 Mac/PC?的主要内容,如果未能解决你的问题,请参考以下文章

尝试通过多点连接将音频从麦克风流式传输到另一部手机

在 iPhone 上录制音频并使用 NSOutputStream 通过网络发送

录制和播放从麦克风录制的音频流

如何桥接字节数组和音频流?

用于从 iphone 麦克风流式传输音频的多点连接

我可以使用 nodejs 将麦克风音频从客户端流式传输到客户端吗?