3

介绍

我目前正在对一个Vimeo风格的应用程序进行一些错误修复,即用户可以从手机或iPad录制视频,然后将视频上传给其他用户观看。由于我们现在处理上传的方式,当前的问题与上传大文件有关。

问题

所以问题本质上是当上传文件到服务器时,我们首先将所有必须上传的字节分配在一个NSData对象中。然后,这个字节串将附加到标准 HTTP Post 消息,然后接收 API 将处理它。问题在于,对于大文件(视频很快),应用程序将简单地崩溃,因为 NSData 对象在 iDevice 上占用了太多内存。

这是该过程的工作方式:

    Byte *buffer = malloc(content.defaultRepresentation.size);

    NSUInteger buffered = [content.defaultRepresentation getBytes:buffer fromOffset:0.0 length:content.defaultRepresentation.size error:nil];

    NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffered];

    NSData *movieData = [NSData dataWithData:data];

我只是从保存在 iPhone 或 iPad 的标准相机胶卷中的视频中获取字节。然后我将这些字节放入一个 NSData 对象中。然后,来自这个 NSData 对象的字节串将被简单地附加到一个简单的 HTTP post 消息并发送到 API。

问题

那么问题是,我看到的问题是整个字节字符串必须在单个 HTTP Post 消息中发送。那么有什么方法可以加载电影文件的块并将其附加到帖子消息中,这样就不会一次占用太多内存?或者你怎么能这样做?

感谢您的时间 :)

4

1 回答 1

2

我建议你使用 ASIHTTPRequest 库。它可以直接从手机上传文件,而不是先将文件加载到内存中。这里的逻辑是将电影文件分成几部分来上传,称为多部分,然后以队列的方式上传

于 2012-04-10T11:53:55.063 回答