从文件中获取字节数据

时间:2015-10-13 00:19:49

标签: ios avfoundation avaudiorecorder

我做什么我正在尝试获取一个音频文件(可能长达一个小时,例如一个播客),我已经用AVAudioRecorder录制了该文件上传到我们的后端。除了上传到服务器之外,它还需要能够暂停"暂停"和"恢复"如果用户选择。因此,我相信,我需要在dataWithBytesNoCopy:buffer类上使用NSData来实现此目标。

我在哪里我知道我可以使用传递的self.mediaURL属性来获取数据:

if (self.mediaURL) {

    NSData *audioData = [NSData dataWithContentsOfURL:self.mediaURL];

    if (audioData) {

        [payloadDic setObject:audioData forKey:@"audioData"];
    }

}

但是,这不会给我所需的功能。我试图跟踪上传的字节数,以便在用户暂停时我可以恢复。

问题如何使用提供的self.mediaURL以便我可以检索文件并像本例一样计算字节长度?

Byte *buffer = (Byte*)malloc((long)audioFile.size);
NSUInteger buffered =[rep getBytes:buffer fromOffset:0.0 length:(long)rep.size error:nil];

NSMutableData *body = [[NSMutableData alloc] init];
body = [NSMutableData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];

1 个答案:

答案 0 :(得分:1)

不要通过尝试重新发明轮子来使事情变得更复杂,而是使用系统为您提供的内容。 NSURLSession允许您执行background upload。您将任务交给会话(使用后台会话配置创建),然后离开。上传时间可以分段进行。不"暂停"或者"恢复"需要;系统负责一切。您的应用甚至不必运行。如果需要身份验证,您的应用将根据需要在后台唤醒。这种架构只针对您描述的情况。

如果问题是您想要随机访问文件数据而不必将整个内容读入大量NSData,请使用NSFileHandle。