如何从设备中的服务器获取视频的下载时间(以毫秒为单位)iOS中的

问题描述:

我在我的服务器上有视频,我想知道我的视频需要从设备中的服务器下载多少时间。所以我可以计算下载时间并检查服务器是否缓慢。任何帮助,将不胜感激。如何从设备中的服务器获取视频的下载时间(以毫秒为单位)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

你不能使用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

我建议你使用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

您可以对其委托使用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