Можно ли «приостановить» и «возобновить» AVAssetDownloadTask? - PullRequest
2 голосов
/ 11 марта 2019

Пока я нашел только два варианта загрузки видео: «Возобновить» или «Отменить» / «Приостановить». Есть ли какой-нибудь возможный способ приостановить загрузку видео в середине и возобновить загрузку с того места, где оно остановилось. Я использую приведенный ниже код для загрузки и хранения видео.

  // 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 Ответ

1 голос
/ 14 марта 2019

здесь вы можете использовать состояние 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, см.это ТАК прошлый ответ

...