0

我从 PhotoLibrary 将大视频资产上传到服务器时遇到问题。

我按照此处所述获取资产数据,将视频导出到本地文档,然后上传。

但是当我上传一个大视频(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];

或者:

[request setHTTPBody:[NSData dataWithContentsOfFile:self.filepath]];

它崩溃了。

你有什么建议吗?

谢谢。

=========================

setHTTPBody:编辑:它在OR 处崩溃setHTTPBodyStream: 所以我认为这是关于内存泄漏之类的。

=================

EDIT2:现在我决定压缩视频,我通过当前方法得到的视频数据太大(超过300mb),但我发现使用UIImagePickerController选择相同的视频,它只有30mb;所以压缩是有帮助的;我会尝试UIVideoEditorController,很快就会发布我的结果;

4

2 回答 2

1

完全的。解决方法是尝试将大视频压缩成小文件;

1.和之前一样,将视频资源导出到tmp目录;

2.使用UIVideoEditorController压缩视频文件;

3.只需像我发布的代码一样上传压缩文件。

就这样。

于 2013-03-26T10:23:45.380 回答
0

检查以下帖子,我在服务器上上传图像,而不是图像,您可以在 Objective C 中通过 POST发布视频 上传图像

于 2013-03-25T10:28:42.837 回答