我做什么我正在尝试获取一个音频文件(可能长达一个小时,例如一个播客),我已经用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];
答案 0 :(得分:1)
不要通过尝试重新发明轮子来使事情变得更复杂,而是使用系统为您提供的内容。 NSURLSession允许您执行background upload。您将任务交给会话(使用后台会话配置创建),然后离开。上传时间可以分段进行。不"暂停"或者"恢复"需要;系统负责一切。您的应用甚至不必运行。如果需要身份验证,您的应用将根据需要在后台唤醒。这种架构只针对您描述的情况。
如果问题是您想要随机访问文件数据而不必将整个内容读入大量NSData,请使用NSFileHandle。