到目前为止,我只找到了下载视频"简历"或"取消"/"暂停"的两个选项。是否有任何可能的方法可以在中间暂停下载视频并从停止的位置恢复下载。我正在使用以下代码下载和存储视频。
// 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
}
在这里您可以使用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模式进行表演,请参阅此