3

序章

私は現在、Vimeoのスタイルのアプリケーションでいくつかのバグ修正を行っています。つまり、ユーザーは電話またはiPadからビデオを録画し、他のユーザーが見ることができるようにビデオをアップロードできます。現在の問題は、現在のアップロードの処理方法が原因で、大きなファイルのアップロードに関係しています。

問題

したがって、問題は基本的に、サーバーにファイルをアップロードするときに、NSDataオブジェクトにアップロードする必要のあるすべてのバイトを最初に割り当てることです。このバイト文字列は、標準のHTTP Postメッセージに添付され、受信APIがそれを処理します。問題は、ファイルサイズが大きい場合(ビデオはすぐになります)、NSDataオブジェクトがiDeviceで大量のメモリを消費するため、アプリが単にクラッシュすることです。

プロセスは次のように機能します。

    Byte *buffer = malloc(content.defaultRepresentation.size);

    NSUInteger buffered = [content.defaultRepresentation getBytes:buffer fromOffset:0.0 length:content.defaultRepresentation.size error:nil];

    NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffered];

    NSData *movieData = [NSData dataWithData:data];

iPhoneまたはiPadの標準カメラロールに保存されているビデオからバイトを取得するだけです。次に、これらのバイトをNSDataオブジェクトに入れます。このNSDataオブジェクトのバイト文字列は、単純なHTTP POSTメッセージに添付され、APIに送信されます。

質問

問題は、そして私が見る問題は、バイト文字列全体を単一のHTTPPostメッセージで送信する必要があるということです。それで、ムービーファイルのチャンクをロードして投稿メッセージに追加して、一度に多くのメモリを消費しないようにする方法はありますか?または、どうすればこれを行うことができますか?

お時間をいただきありがとうございます:)

4

1 に答える 1

2

ASIHTTPRequest ライブラリを使用することをお勧めします。最初にファイルをメモリにロードする代わりに、電話からファイルを直接アップロードできます。ここでのロジックは、マルチパートと呼ばれる部分に分割してムービー ファイルをアップロードし、キュー形式でアップロードすることです。

于 2012-04-10T11:53:55.063 に答える