2014-09-22 36 views
1

我在我的服務器上有視頻,我想知道我的視頻需要從設備中的服務器下載多少時間。所以我可以計算下載時間並檢查服務器是否緩慢。任何幫助,將不勝感激。如何從設備中的服務器獲取視頻的下載時間(以毫秒爲單位)iOS中的

這裏是我的代碼:

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:url] cachePolicy:NSURLCacheStorageNotAllowed timeoutInterval:[[Configuration sharedInstance] fatchTimeOut]]; 

    [GMURLConnection sendAsynchronousRequest:request queue:self.operationQueue type:type withSubType:subType completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 

//**********************Success Handling ******************** 
    if (type == OperationTypeMeta) { 
     failCount = 0; 
     NSError *error = nil; 

     NSArray *serverResponse=[NSArray array]; 
     if(data) 
      serverResponse = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; 
     }]; 
+0

請顯示您的代碼 – 2014-09-22 06:34:35

回答

0

你不能使用sendAsynchronousRequest和監視連接狀態。按apple docs

要使用完成處理程序塊檢索一個URL的內容:如果 你不需要監視請求的狀態,而僅僅需要 執行某些操作時,數據已被完全收到,你可以通過 調用sendAsynchronousRequest:queue:completionHandler :,傳遞一個塊 來處理結果。

所以你必須實現NSURLConnection委託。如果你喜歡塊風格(就像我真的那樣),只需創建一個實現委託方法的新類,並將NSURLRequest,狀態塊和完成塊作爲參數並在適當的委託方法中調用它們。通過這種方式,您將擁有狀態更新的塊式異步請求。

如果您不知道如何測量剩餘時間 - 每次調用didReceiveData:方法將數據長度附加到類變量,並計算自上次方法接收後經過的時間。這樣你有速度(每秒字節數)。知道你下載的文件有多大,只需將剩餘大小分配給你的速度,你就會得到剩餘時間。有一些整齊的算法可以獲得整潔/穩定的剩餘時間,而不僅僅是從30秒跳到2分鐘(如果我們假設我們的互聯網連接是棘手的)。我個人使用@Ben蝙蝠的解決方案貼過here

averageSpeed = SMOOTHING_FACTOR * lastSpeed + (1-SMOOTHING_FACTOR) * averageSpeed; 

有了一些調整,並與SMOOTHING_FACTOR我已經完成了很大的成績打。

+0

非常感謝。我會嘗試並回復你。 – 2014-09-22 11:19:27

0

我建議你使用AFHTTPRequestOperation。像這樣:

AFHTTPRequestOperation* operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead){ 

     }]; 
+0

我不能使用外部sdk。我已經有一個名爲sendasynchronousblock的塊來從服務器獲取數據。 [GMURLConnection sendAsynchronousRequest:request queue:self.operationQueue type:type withSubType:subType completionHandler:^(NSURLResponse * response,NSData * data,NSError * error){}]; – 2014-09-22 06:34:01

0

您可以對其委託使用NSURLConnection。

當下載的文件首先你從服務器獲取響應具有總文件大小

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response; 
    _expectedContentLength = [response expectedContentLength]; 
     if (_expectedContentLength==NSURLResponseUnknownLength) 
      _expectedContentLength = 0; 
} 

經過- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data您可以計算從時間下載所花費的時間來下載文件和整個文件大小的部分

+0

其實我在這裏使用sendAsynchronousRequest塊。根據你,我將hav創建一個http連接。我們能在這個街區內找到時間嗎? – 2014-09-22 06:53:21

相關問題