用于HLScaching的AVAssetDownloadDelegate方法未被调用

我已经按照这里给出的HLScaching的教程,但控制从来没有达到任何代表(AVAssetDownloadDelegate)。

我错过了什么? 这是我写的代码

- (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. } 

我正在模拟器上运行代码

模拟器上不支持下载HLSstream。

当我使用下面提到的委托方法时,我想到了它。

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

现在挣扎了一整天,我在这里find了苹果的一个样本,并得出了问题的真正原因。