AVAssetDownloadDelegate methods for HLS caching not called

I followed the tutorial provided here for HLS caching, but the control never reaches any of the delegates (from AVAssetDownloadDelegate).

Did I miss something? Here is the code I wrote

- (void)setupAssetDownloader { NSURL *assetURL = [NSURL URLWithString:@"STREAMING_HOST/video/hls/3729170.m3u8"]; AVURLAsset *hlsAsset = [AVURLAsset assetWithURL:assetURL]; urlSessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"assetDowloadConfigIdentifier"]; avAssetDownloadSession = [AVAssetDownloadURLSession sessionWithConfiguration:urlSessionConfiguration assetDownloadDelegate:self delegateQueue:[NSOperationQueue mainQueue]]; // Download movie avAssetDownloadTask = [avAssetDownloadSession assetDownloadTaskWithURLAsset:hlsAsset assetTitle:@"downloadedMedia" assetArtworkData:nil options:nil]; //@{AVAssetDownloadTaskMinimumRequiredMediaBitrateKey : @(300000)} [avAssetDownloadTask resume]; AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset:avAssetDownloadTask.URLAsset]; AVPlayer *player = [[AVPlayer alloc ] initWithPlayerItem:playerItem]; AVPlayerLayer *playerLayer = [[AVPlayerLayer alloc ] init]; [playerLayer setPlayer:player]; [playerLayer setFrame:self.view.frame]; [self.view.layer addSublayer:playerLayer]; [player play]; } #pragma mark - AVAssetDownloadDelegate - (void)URLSession:(NSURLSession *)session assetDownloadTask:(AVAssetDownloadTask *)assetDownloadTask didResolveMediaSelection:(AVMediaSelection *)resolvedMediaSelection { } - (void)URLSession:(NSURLSession *)session assetDownloadTask:(AVAssetDownloadTask *)assetDownloadTask didLoadTimeRange:(CMTimeRange)timeRange totalTimeRangesLoaded:(NSArray<NSValue *> *)loadedTimeRanges timeRangeExpectedToLoad:(CMTimeRange)timeRangeExpectedToLoad { NSInteger percent = 0; for (NSValue *value in loadedTimeRanges) { CMTimeRange timeRange = [value CMTimeRangeValue]; percent += CMTimeGetSeconds(timeRange.duration) / CMTimeGetSeconds(timeRangeExpectedToLoad.duration); } percent *= 100; NSLog(@"Progress: %ld", (long)percent); } - (void)URLSession:(NSURLSession *)session assetDownloadTask:(AVAssetDownloadTask *)assetDownloadTask didFinishDownloadingToURL:(NSURL *)location { NSString *localPath = location.relativePath; NSLog(@"localPath: %@", localPath); // TODO: Play downloaded file // IMPORTANT: Don't move this file to another location. } 
+5
source share
1 answer

I ran the code on the simulator and

Downloading HLS streams is not supported on the simulator.

I realized this when I used the delegate method mentioned below.

 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error { } 

And now, fighting all day, I found an Apple sample here and got a real cause of the problem.

+5
source

Source: https://habr.com/ru/post/1258329/


All Articles