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

次の投稿を確認してください。サーバーに画像をアップロードしています。画像の代わりに 、ObjectiveCでPOSTを介して画像をアップロードするビデオを投稿できます。

于 2013-03-25T10:28:42.837 に答える