1

Web サービスを使用して、アプリから Web サーバーに大きなファイルをアップロードしようとしています。

ビデオをNSDataインスタンスに読み込み、それを base64 でエンコードされた文字列に変換しています。次に、文字列を webservice に渡します。アップロード中にビデオの品質を低くしてみましたが、それでもサーバーに 5 分を超えるビデオをアップロードできず、サーバーが応答を停止します。

サーバーからエンコードされたデータを確認すると、完全に受信されていません。ファイルのサイズが大きすぎて、正しく送信されていないと思います。以下は私のコードの一部です。多くの投稿で言及されている多くのオプションを試しましたが、クライアントの要件に従ってビデオを適切にアップロードできません。4 ~ 5 分の動画を低品質で正常にアップロードできましたが、大きな動画をアップロードできませんでした。私を助けてください。

NSData *videoData = [NSData dataWithContentsOfURL:urlVideo];
pictureDataString = [videoData base64Encoding];

----other code 

xml = [xml stringByAppendingString:[NSString stringWithFormat:@"<BinaryData>%@</BinaryData>",pictureDataString]]; 

...other code 

xml 全体を生成した後、次のコードを使用しています。

url = [NSURL URLWithString:@UploadMemory];

serviceRequest = [ASIHTTPRequest requestWithURL:url];
[serviceRequest setShouldStreamPostDataFromDisk:YES];
[serviceRequest addRequestHeader:@"Content-Type" value:@"text/xml"];
[serviceRequest appendPostData:[xml dataUsingEncoding:NSUTF8StringEncoding]];
[serviceRequest setTimeOutSeconds:86400];
[serviceRequest setDelegate:self];
[serviceRequest startAsynchronous];

インスタンスを複数の部分に分割し、NSData個別の XML ファイルをサーバーに送信して、時間を節約し、大きなビデオ ファイルをサーバーにアップロードできるようにしましたが、まだうまくいきません。

データをbase64にエンコードするのに時間がかかるため、複数のxmlをサーバーに送信するためにエンコードされた文字列を分割できません。これを行うためのより良い方法を提案してください。

iOSでデータファイルをバイナリ形式で読み取る方法を誰かが教えてくれれば、これに対してもう1つのオプションがあります。これにより、ビデオファイルをバイナリ分割で読み取っNSDataてから、それをbase64エンコーディングに変換して動作させることができます。

どうもありがとう ....

4

1 に答える 1

0

メインスレッドでエンコードを行っている可能性はありますか? その場合、iOS のウォッチドッグ タイマーは、一定時間経過後にアプリがクラッシュし、プロセスが起動したと判断した可能性があります。その場合は、バックグラウンド プロセスでエンコードを行う必要があります。

于 2016-01-13T16:17:08.603 に答える