2016-10-17 14 views
5

Tôi đã làm theo hướng dẫn cho here cho bộ nhớ đệm HLS, nhưng điều khiển không bao giờ đạt đến bất kỳ đại biểu nào (của AVAssetDownloadDelegate).AVAssetDownloadDelegate phương pháp cho bộ nhớ đệm HLS không nhận được gọi là

Tôi có thiếu gì không? Đây là mã tôi đã viết

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

Đây là một ví dụ rất hữu ích bất kể câu hỏi. Cảm ơn bạn! – Warpling

Trả lời

5

Tôi đã chạy mã trên giả lập và

Tải HLS suối không được hỗ trợ trên trình mô phỏng.

Tôi đã tìm ra khi tôi sử dụng phương thức đại biểu được đề cập bên dưới.

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

} 

Và hiện đang vật lộn cả ngày, tôi tìm thấy mẫu của Apple here và có lý do thực sự đằng sau vấn đề.

+1

Hey, tôi đang chạy cùng một mã trên thiết bị nhưng vẫn còn phương pháp đại biểu của tôi không được gọi là, bất kỳ ý tưởng? – Sikander

Các vấn đề liên quan