是否可以“暂停”和“恢复” AVAssetDownloadTask?

时间:2019-03-11 13:20:13

标签: ios objective-c avurlasset avassetdownloadtask

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

  // 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
    }

1 个答案:

答案 0 :(得分: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