【问题标题】:How to upload large video in iOS?如何在 iOS 中上传大视频?
【发布时间】:2014-03-10 08:01:44
【问题描述】:

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

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

它适用于小视频。但是当视频大小超过 200-500 MB 时,我的应用程序会崩溃。我将视频保存在一个变量中,以向不同的社交网站和保管箱提供上传功能。

我收到的消息因内存错误而终止。

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

已编辑

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

【问题讨论】:

标签: ios iphone memory-management


【解决方案1】:

查看NSInputStream 并将NSMutableURLRequestHTTPBodyStream 设置为视频的输入流 - 这将从磁盘中获取所需的数据并上传。

例如如果您使用过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];

链接

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 2014-04-04
      • 2014-07-04
      • 2015-10-23
      • 2015-11-03
      • 1970-01-01
      相关资源
      最近更新 更多