2016-10-17 13 views
5

नहीं कहा जा रहा है मैंने एचएलएस कैशिंग के लिए here दिए गए ट्यूटोरियल का पालन किया है, लेकिन नियंत्रण किसी भी प्रतिनिधि (AVAssetDownloadDelegate) तक कभी नहीं पहुंचता है।एचएलएस कैशिंग के लिए 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. 
} 
+1

प्रश्न के बावजूद यह एक बहुत उपयोगी उदाहरण था। धन्यवाद! – Warpling

उत्तर

5

लिखा था मैं सिम्युलेटर पर कोड और

डाउनलोड कर रहा है एचएलएस धाराओं सिम्युलेटर पर समर्थित नहीं है चल रहा था है।

मैंने इसे उल्लिखित प्रतिनिधि विधि का उपयोग करते समय इसे समझ लिया।

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

} 

और अब पूरे दिन के लिए संघर्ष कर रहा है, मैं एप्पल here द्वारा एक नमूना मिल गया है और समस्या के पीछे असली कारण मिला है।

+1

अरे, मैं डिवाइस पर एक ही कोड चला रहा हूं लेकिन फिर भी मेरे प्रतिनिधि तरीकों को नहीं कहा जाता है, कोई विचार? – Sikander

संबंधित मुद्दे