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

时间:2012-04-16 14:09:56

标签: objective-c ios cocoa-touch rest audio

如何将音频编码为u-law g.711?然后通过http。

将该音频发送到远程服务器
  

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

我在谷歌和这里搜索过但主要是我发现的是从服务器流向I设备的方式,而不是相反。我确实找到了这个帖子(http://stackoverflow.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(因此是编码的名称),但是我对音频编解码器一无所知,也不知道在ios上是否可以使用G711 mu-law。
如何以正确的格式对音频进行编码?

然后如何将编码后的音频发送到服务器?现在我将它转到临时文件位置,但即使我改变了它,我也看不出这会有什么帮助。我知道这有很多要求,而且我不打算给我一个答案,但我需要一个开始的地方,因为目前我对如何做到这一点感到很遗憾。

1 个答案:

答案 0 :(得分:0)

在完成录制后发送音频

 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];