Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在iOS中上传大型视频?_Ios_Iphone_Memory Management - Fatal编程技术网

如何在iOS中上传大型视频?

如何在iOS中上传大型视频?,ios,iphone,memory-management,Ios,Iphone,Memory Management,我正在做一个项目,我必须上传一个大型视频到服务器。我试图将视频保存在一个变量中。我目前正在使用下面的代码 NSData *data=[NSData dataWithContentsOfFile:self.path]; 它适用于小视频。但当视频超过200-500 MB时,我的应用程序崩溃。我将视频保存在一个变量中,以向不同的社交网站和dropbox提供上传功能 由于内存错误,我收到的消息被终止 请给我一些建议。我怎样才能做到这一点 已编辑 我必须在NSData中保存视频,因为我需要通过API将视

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

NSData *data=[NSData dataWithContentsOfFile:self.path];
它适用于小视频。但当视频超过200-500 MB时,我的应用程序崩溃。我将视频保存在一个变量中,以向不同的社交网站和dropbox提供上传功能

由于内存错误,我收到的消息被终止

请给我一些建议。我怎样才能做到这一点

已编辑


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

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


幸运的是,你有现成的解决方案。如果您必须只支持iOS 7,请查看
NSURLSessionUploadTask
。如果您还必须支持旧版本,可能最简单的方法是使用AFNetworking。查看此页面上的“多部分请求”:查看
NSInputStream
,并将
NSMutableURLRequest
HTTPBodyStream
设置为视频的输入流-这将从磁盘获取所需的数据并上传

e、 g.如果您使用了AFNetworking,您可以执行以下类似操作:

NSMutableURLRequest *request = [afNetworkingHTTPClient requestWithMethod:@"POST" path:@"endpoint/path" parameters:nil];
request.HTTPBodyStream = [[NSInputStream alloc] initWithFileAtPath:@"path/to/your/file"];

//... Configure your request here

AFHTTPRequestOperation *HTTPOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request];


//... Set the success / failure blocks on the operation to check its state

[afNetworkingHTTPClient enqueueHTTPRequestOperation:HTTPOperation];
链接


请参阅此链接一次。这可能会有帮助。。