【问题标题】:is it possible to "Pause" and "Resume" AVAssetDownloadTask?是否可以“暂停”和“恢复”AVAssetDownloadTask?
【发布时间】:2019-08-01 19:41:44
【问题描述】:

到目前为止,我发现只有两个下载视频的选项“恢复”或“取消”/“暂停”。是否有任何可能的方法可以在中间暂停下载视频并从停止的位置恢复下载。我正在使用下面的代码来下载和存储视频。

  // Create new background session configuration.
    NSURLSessionConfiguration *urlSessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"assetDowloadConfigIdentifier"];
    AVAssetDownloadURLSession *avAssetDownloadSession = [AVAssetDownloadURLSession sessionWithConfiguration:urlSessionConfiguration assetDownloadDelegate:self delegateQueue:[NSOperationQueue mainQueue]];

    NSURL *assetURL = [NSURL URLWithString:@"https://a4i6y2k6.stackpathcdn.com/vistvorigin/smil:4b0d690b7b3bc8ac5da2049f50c80794c762423e.smil/playlist.m3u8"];

    AVURLAsset *hlsAsset = [AVURLAsset assetWithURL:assetURL];

   if (@available(iOS 10.0, *)) {

        AVAssetDownloadTask *avAssetDownloadTask = [avAssetDownloadSession assetDownloadTaskWithURLAsset:hlsAsset assetTitle:@"downloadedMedia" assetArtworkData:nil options:nil];

        if([command isEqualToString:@"resume"]){
            // Start task and begin download
            [avAssetDownloadTask resume];
        }else{
            [avAssetDownloadTask cancel];
        }

    } else {
        // Fallback on earlier versions
    }

【问题讨论】:

    标签: ios objective-c avurlasset avassetdownloadtask


    【解决方案1】:

    这里可以使用suspend的状态

    任务在暂停时不会产生网络流量并且不会超时。下载任务可以在以后继续传输数据。所有其他任务在恢复后必须重新开始。

    如果你想找到你当前的任务状态使用state属性,它会返回当前状态,状态如下

     /* 
    NSURLSessionTaskStateRunning = 0,                     
    NSURLSessionTaskStateSuspended = 1,
    NSURLSessionTaskStateCanceling = 2,                   
    NSURLSessionTaskStateCompleted = 3,  
    

    例如,您可以像这样使用

     NSURL *assetURL = [NSURL URLWithString:@"https://a4i6y2k6.stackpathcdn.com/vistvorigin/smil:4b0d690b7b3bc8ac5da2049f50c80794c762423e.smil/playlist.m3u8"];
    
    AVURLAsset *hlsAsset = [AVURLAsset assetWithURL:assetURL];
    
    if (@available(iOS 10.0, *)) {
    
        AVAssetDownloadTask *avAssetDownloadTask = [avAssetDownloadSession assetDownloadTaskWithURLAsset:hlsAsset assetTitle:@"downloadedMedia" assetArtworkData:nil options:nil];
        if(avAssetDownloadTask.state ==  1){
            // Start task and begin download
            [avAssetDownloadTask resume];
        }else{
            [avAssetDownloadTask cancel];
        }
    
    
    } else {
        // Fallback on earlier versions
    }
    

    选项 2

    如果你想用 KVO 模式执行,请看这个SO past answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多