我正在开展一个项目,我必须将大型视频上传到服务器。我试图将视频保存在一个变量中。我目前正在使用下面的代码。
NSData *data=[NSData dataWithContentsOfFile:self.path];
适用于小视频。但是当视频超过200-500 MB时,我的应用程序崩溃了。我在变量中保存视频,以便为不同的社交网站和Dropbox提供上传功能。
我得到的消息是由于内存错误而终止。
请指教。我怎样才能做到这一点。
被修改
我必须在NSData中保存视频,因为我需要通过API在不同的社交网站上传视频,例如Facebook,Dropbox,Google Drive等。 API使用NSData来保存视频的二进制数据。所以我相信我不能在这里使用AFNetworking,NSInput Stream或任何其他机制。
答案 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/