我在将大型视频资源从PhotoLibrary上传到服务器时遇到了问题。
我将资产数据设为described here,将视频导出到本地文档,然后上传。
但是当我上传一个大视频(2分钟,大小约300Mb或更多)时,这种方法会导致崩溃,我没有理由也没有任何信息。
我使用webDAV
上传文件:
// Set up credentials
NSURLCredential *userCredentials = [NSURLCredential credentialWithUser:username
password:password
persistence:NSURLCredentialPersistenceForSession];
NSURLProtectionSpace *space = [[NSURLProtectionSpace alloc] initWithHost:host
port:80
protocol:@"http"
realm:@" webDAV"
authenticationMethod:nil];
[[NSURLCredentialStorage sharedCredentialStorage] setCredential:userCredentials forProtectionSpace:space];
[space release];
// Create the request
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PUT"];
[request setValue:[self mimetypeForFile:self.filepath] forHTTPHeaderField:@"Content-Type"];
NSNumber *contentLength = (NSNumber *) [[[NSFileManager defaultManager]
attributesOfItemAtPath:self.filepath error:NULL]
objectForKey:NSFileSize];
[request setValue:[contentLength description] forHTTPHeaderField:@"Content-Length"];
if (self.useStreaming)
{
if (self.currentFileStream!=nil)
{
[self.currentFileStream close], self.currentFileStream = nil;
}
self.currentFileStream = [NSInputStream inputStreamWithFileAtPath:self.filepath];
if (currentFileStream!=nil)
{
[request setHTTPBodyStream:currentFileStream];
}
else
{
[request setHTTPBody:[NSData dataWithContentsOfFile:self.filepath]];
}
}
else
{
[request setHTTPBody:[NSData dataWithContentsOfFile:self.filepath]];
}
NSURLConnection* conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if (self.currentConnection!=nil)
{
self.currentConnection = nil;
}
self.currentConnection = conn;
[conn release];
[self.currentConnection start];
当代码到达此行时:
self.currentFileStream = [NSInputStream inputStreamWithFileAtPath:self.filepath];
[request setHTTPBodyStream:currentFileStream];
OR:
[request setHTTPBody:[NSData dataWithContentsOfFile:self.filepath]];
它崩溃了。
你有什么建议吗?
感谢。
========================
编辑:它在setHTTPBody:
或setHTTPBodyStream:
时崩溃
所以我认为这是关于内存泄漏的东西。
=====
EDIT2:现在我决定压缩视频,我通过当前方法得到的视频数据太大(超过300mb),但我发现使用UIImagePickerController
选择相同的视频,它只有30mb;所以压缩是有帮助的; 我会尝试UIVideoEditorController
,并会很快发布我的结果;
答案 0 :(得分:1)
<强>已完成。解决方案是尝试将大视频压缩为小文件;
1.像以前一样,将视频资产导出到tmp目录;
2.使用UIVideoEditorController压缩视频文件;
3.只需像我发布的代码一样上传压缩文件。
就是这样。
答案 1 :(得分:0)
查看以下帖子,我在服务器上上传图片,而不是图片,您可以发布视频Uploading Image via POST in Objective C