如何在iOS上传大视频?

时间:2014-02-12 06:34:01

标签: ios iphone memory-management

我正在开展一个项目,我必须将大型视频上传到服务器。我试图将视频保存在一个变量中。我目前正在使用下面的代码。

NSData *data=[NSData dataWithContentsOfFile:self.path];

适用于小视频。但是当视频超过200-500 MB时,我的应用程序崩溃了。我在变量中保存视频,以便为不同的社交网站和Dropbox提供上传功能。

我得到的消息是由于内存错误而终止。

请指教。我怎样才能做到这一点。

被修改

我必须在NSData中保存视频,因为我需要通过API在不同的社交网站上传视频,例如Facebook,Dropbox,Google Drive等。 API使用NSData来保存视频的二进制数据。所以我相信我不能在这里使用AFNetworking,NSInput Stream或任何其他机制。

2 个答案:

答案 0 :(得分:2)

查看NSInputStream并将HTTPBodyStream的{​​{1}}设置为视频的输入流 - 这将从磁盘中获取所需的数据并上传。< / p>

e.g。如果您使用NSMutableURLRequest,则可以执行与以下内容类似的操作:

AFNetworking

链接

答案 1 :(得分:0)

你简单不能也不想在内存中容纳数百MB。这不是上传视频的方式。首先,我建议您配置视频录制参数,以便即使视频质量较低,生成的文件也会较小。您的用户不希望上传2-500 MB。但即使如此,生成的文件太大,无法“从内存中”上传。你应该读一小部分,比如说100kByte,上传到服务器,读下一部分,上传等等。

幸运的是,你有很好的解决方案。如果您只需支持iOS 7,请查看NSURLSessionUploadTask。如果您还必须支持旧版本,可能最简单的方法是使用AFNetworking。查看此页面上的“多部分请求”:http://cocoadocs.org/docsets/AFNetworking/2.1.0/