首页 > 解决方案 > 在 iOS 上使用 Objective-C 将实时麦克风数据流式传输到其他设备?

问题描述

尝试在 iOS 上的设备之间传输麦克风音频,其中有人可以对着他们的 iPhone 说话,它会在某个地方的另一个扬声器上播放,连接是通过套接字创建的。我在这里发现了一个类似的问题,但它涵盖了objective-C中程序的网络部分,我正在使用python处理网络,并希望使用objective-C和AVFoundation进行记录?我已经整理好了网络部分,我只是不确定如何使用objective-C进行记录。我发现的大多数示例都在做一些事情[recorder start];,但是我应该如何使用它通过套接字对象发送音频?我希望有类似的东西 var = mic.read(); socket.send(var, addr) 或者只是我通过套接字发送的任何对象,这些对象代表可以在套接字的另一侧相应处理的音频数据。甚至可能是这样的AudioObjectOfSomeSort *var = [recorder start];?然后在 python 中socket.send(var, addr)?我在网上找到了这段代码:

- (IBAction)startRecord:(id)sender {

    NSArray *path = [NSArray arrayWithObjects:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject], @"myRecording.m4a", nil];

    NSURL *url = [NSURL fileURLWithPathComponents:path];

    AVAudioSession *session = [[AVAudioSession alloc] init];
    [session setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];

    NSMutableDictionary *setting = [[NSMutableDictionary alloc] init];
    [setting setValue:[NSNumber numberWithInteger:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];
    [setting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
    [setting setValue:[NSNumber numberWithInteger:1] forKey:AVNumberOfChannelsKey];

    recorder = [[AVAudioRecorder alloc] initWithURL:url settings:setting error:nil];
    recorder.meteringEnabled = YES;
    [recorder prepareToRecord];
    [recorder record];

}

- (IBAction)stopRecord:(id)sender {
    [recorder stop];

    AVAudioSession *session = [[AVAudioSession alloc] init];
    [session setActive:NO error:nil];

}

- (IBAction)play:(id)sender {
    if (!recorder.recording){
    player = [[AVPlayer alloc] initWithURL:recorder.url];
    [player play];
    }

}

这段代码只是记录并保存到文件中,我需要通过套接字连续传输音频。我确实找到了这个这个,但我不太了解 Swift,也没有足够的知识将它翻译成 Objective-C,我是一名 python 程序员。此外,通过套接字发送的数据是否能够以某种方式在 Android 设备上被 Java 解码、读取和播放?到目前为止,我还没有发现任何其他东西。任何帮助将不胜感激。

标签: iosobjective-caudio-streamingmicrophoneavaudiorecorder

解决方案


推荐阅读