2

次の問題に直面しています。私のプロジェクトでは、すべてのネットワーク操作に AFNetworking を使用しています。それらの 1 つは、ビデオをサーバーにアップロードすることです。次に、大きなビデオ (約 100 Mb) をアップロードしようとすると、リクエストのタイムアウト エラーが発生します。

エラー Domain=NSURLErrorDomain Code=-1001 「リクエストがタイムアウトしました。」UserInfo=0x15641b30
{NSErrorFailingURLStringKey= http://server.name/path , NSErrorFailingURLKey= http://server.name/path , NSLocalizedDescription=リクエストがタイムアウトしました., NSUnderlyingError=0x16f7a000 "リクエストがタイムアウトしました."}

現在、AFNetworking v1.3.3 を使用していますが、v2.0 は iOS5 のサポートが必要なため使用できません。

アップロードが開始されたばかりのとき、アップロードの進行状況は問題ないように見えます (UploadProgressBlock で確認できます)。しかし、数メガバイトの後、アップロードが遅くなり始め、後で停止します。SpeedTest は、アップロードに 5Mbps、ダウンロードに 5Mbps を提供します。

Web ブラウザからの動画のアップロードは正常に機能しているため、サーバーの問題ではないと思います。

これが私のコードです:

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL: 
            [NSURL URLWithString:@"http://server.name/"]];
NSString *appid = [[self class] sharedProvider].ApplicationId;

ALAssetRepresentation *representaion =
             [videoData.videoAsset defaultRepresentation];
NSURL *url =
 [BRDataProvider getVideoAssetURLForTempFileWithAsset:
                                 videoData.videoAsset];

AFHTTPRequestOperation *operation;

if (url) {
NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" 
    path:@"some/path" parameters:nil

constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

  NSData *hdnADCID = [appid dataUsingEncoding:NSUTF8StringEncoding];
     [formData appendPartWithFormData:hdnADCID name:@"hdnADCID"];
    NSData *txtTitle =
         [videoData.title dataUsingEncoding:NSUTF8StringEncoding];

 [formData appendPartWithFormData:txtTitle name:@"txtTitle"];

      NSData *txtDescription =
             [videoData.description dataUsingEncoding:NSUTF8StringEncoding];
    [formData appendPartWithFormData:txtDescription name:@"txtDescription"];

  NSData *txtKeywords =
       [videoData.tags dataUsingEncoding:NSUTF8StringEncoding];
    [formData appendPartWithFormData:txtKeywords name:@"txtKeywords"];
       [formData
     appendPartWithFileURL:url name:representaion.filename error:nil];
 }];
[request setTimeoutInterval:600];
operation = [fliqzClient HTTPRequestOperationWithRequest:request
   success:^(AFHTTPRequestOperation *operation, id responseObject) {

  [[NSFileManager defaultManager] removeItemAtURL:url error:nil];

   NSString *assetID = [operation.responseString
 stringByReplacingOccurrencesOfString:@"&\r\n" withString:@""];
       assetID = [assetID stringByReplacingOccurrencesOfString:@"id=
                           " withString:@""];
       videoData.assetId = assetID;
       [BRDataProvider registerVideoWithInfo:videoData completion:^(id result,
              NSError *error) {
          block(result,error);
           }];
         } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

               NSLog(@"error - %@", error);

                block(nil,error);
    [[NSFileManager defaultManager] removeItemAtURL:url error:nil];
                                                 }];

[operation setUploadProgressBlock:^(NSUInteger bytesWritten,
long long totalBytesWritten, long long totalBytesExpectedToWrite) {
   NSLog(@"bytesWritten - %d, totalBytesWritten - %lld,
     totalBytesExpectedToWrite - %lld", bytesWritten,
           totalBytesWritten, totalBytesExpectedToWrite);
}];
[client enqueueHTTPRequestOperation:operation];
} else {
NSError *error = [NSError errorWithDomain:kBRErrorDomainOwnDomain
                                     code:0



 userInfo:@{NSLocalizedDescriptionKey:kPreprocessingErrorUploadVideoMessage}];
    block(nil, error);
    }

多分誰かがそれを修正する方法を知っていますか?ご協力いただきありがとうございます!

4

1 に答える 1

2

AFNetworking で同様の問題が発生しました: NSURLErrorDomain Code=-1001 "The request timed out." 外部サーバーから取得し、デバイスが WAN に接続されたルーターへのサブネット上にある場合、要求は完全に機能します (192.168.1.0 サブネット-1 -> WAN)。ただし、WAN に接続されたルーターに接続されているサブネットに接続されている場合、要求は上記のメッセージ (192.168.0.0 サブネット-2 -> 192.168.1.0 サブネット-1 -> WAN) で失敗します。すべてのブラウザー操作はサブネット 2 を介して正常に機能し、AFNetworking は接続しているように見えますが、タイムアウトを受け取ります。問題はサブネット 2 ルーターの構成にあると思われます。

于 2014-05-09T14:35:05.130 に答える