通过 POST 命令将音频从 ios 流式传输到 REST 服务器

Posted

技术标签:

【中文标题】通过 POST 命令将音频从 ios 流式传输到 REST 服务器【英文标题】:stream audio from ios to REST server via POST command 【发布时间】:2012-04-16 14:09:55 【问题描述】:

如何将音频编码为 u-law g.711?然后通过 http 将该音频发送到远程服务器。

AUDIO STREAM:将连续的音频流发送到 当前查看的相机。音频需要在 G711 mu-law 编码 64 kbit/s 用于传输到床边的 Axis 摄像机。发送(这个 应该是连接服务器的 SSL 中的 POST URL):POST /transmitaudio?id= 内容类型:音频/基本 内容长度:99999(长度被忽略)

我在 google 和 here 上进行了搜索,但我发现的主要是从服务器流式传输到 I 设备的方式,而不是相反的方式。我确实找到了这个帖子(http://***.com/questions/7750329/how-to-send-audio-file-through-http-post-to-a-server-from-ios)但是它似乎喜欢答案描述性不强,也没有被接受。

这是我目前所拥有的。


        NSNumber *formatObject;

        switch (self.recordEncoding) 
            case (ENC_AAC): 
                formatObject = [NSNumber numberWithInt: kAudioFormatMPEG4AAC];
                break;
            case (ENC_ALAC):
                formatObject = [NSNumber numberWithInt: kAudioFormatAppleLossless];
                break;
            case (ENC_IMA4):
                formatObject = [NSNumber numberWithInt: kAudioFormatAppleIMA4];
                break;
            case (ENC_ILBC):
                formatObject = [NSNumber numberWithInt: kAudioFormatiLBC];
                break;
            case (ENC_ULAW):
                formatObject = [NSNumber numberWithInt: kAudioFormatULaw];
                break;
            default:
                formatObject = [NSNumber numberWithInt: kAudioFormatAppleIMA4];
        

        [recordSettings setObject:formatObject forKey: AVFormatIDKey];
        [recordSettings setObject:[NSNumber numberWithFloat:44100.0] forKey: AVSampleRateKey];
        [recordSettings setObject:[NSNumber numberWithInt:2] forKey:AVNumberOfChannelsKey];
        [recordSettings setObject:[NSNumber numberWithInt:12800] forKey:AVEncoderBitRateKey];
        [recordSettings setObject:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
        [recordSettings setObject:[NSNumber numberWithInt: AVAudioQualityHigh] forKey: AVEncoderAudioQualityKey];
    

这似乎是 U-law(因此是编码的名称),但是我对音频编解码器一无所知,也不知道 G711 mu-law 在 ios 上是否可行。我如何获得我的音频以正确的格式编码?

那么如何将编码后的音频发送到服务器?现在我将它发送到一个临时文件位置,但即使我改变了它,我也看不出这有什么帮助。我知道这有很多要求,我不希望得到答案,但我需要一个开始的地方,因为目前我对如何做到这一点相当迷茫。

【问题讨论】:

目前正在尝试 AFNetworking 【参考方案1】:

这会在完成录制后发送音频

 self.request = [client multipartFormRequestWithMethod:@"POST" path:[NSString stringWithFormat:@"transmitaudio?id=%@",self.restClient.sessionId] parameters:parameters constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) 
                    
                        NSError * error = [[NSError alloc]init];

                        [formData appendPartWithFileURL:self.audioHandler.soundFileURL name:@"sound.caf" error:&error];
                        //            NSLog(@"error %@", [error localizedDescription]);
                    ];

    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:self.request];

    [self.queue addOperation:operation];

【讨论】:

以上是关于通过 POST 命令将音频从 ios 流式传输到 REST 服务器的主要内容,如果未能解决你的问题,请参考以下文章

通过 socket.io 流式传输实时音频

将音频流式传输到其他 iOS 设备(使用多点)并通过本地设备播放音频

iOS:如何将音频数据从客户端流式传输到服务器?

将音频流式传输到本地网络

将音频流式传输到多个 Web 浏览器

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