How to get file size and current file size from NSURL for AVPlayer iOS4.0

前端 未结 3 1728
迷失自我
迷失自我 2020-12-20 08:13
self.player = [[AVPlayer playerWithURL:[NSURL URLWithString:@\"http://myurl.com/track.mp3\"]] retain];

I am trying make a UIProgressView for the ab

相关标签:
3条回答
  • 2020-12-20 08:52

    @"loadedTimeRange" is a KVO value for the AVPlayerItem class. You can find its definition in the AVPlayerItem.h file in the

    @interface AVPlayerItem (AVPlayerItemPlayability)
    

    category definition.

    0 讨论(0)
  • 2020-12-20 08:59

    I think you do not want to know anything about file-sizes, but you're more interested in times.

    Try self.player.currentItem.asset.duration for duration of currently playing item, self.player.currentTime for current time.

    0 讨论(0)
  • 2020-12-20 09:00

    You need to start observing the loadedTimeRanges property of the current item, like this:

    AVPlayerItem* playerItem = self.player.currentItem;
    [playerItem addObserver:self forKeyPath:kLoadedTimeRanges options:NSKeyValueObservingOptionNew context:playerItemTimeRangesObservationContext];
    

    Then, in the observation callback, you make sense of the data you're passed like this:

    -(void)observeValueForKeyPath:(NSString*)aPath ofObject:(id)anObject change:(NSDictionary*)aChange context:(void*)aContext {
    
    if (aContext == playerItemTimeRangesObservationContext) {
    
        AVPlayerItem* playerItem = (AVPlayerItem*)anObject;
        NSArray* times = playerItem.loadedTimeRanges;
    
        // there is only ever one NSValue in the array
        NSValue* value = [times objectAtIndex:0];
    
        CMTimeRange range;
        [value getValue:&range];
        float start = CMTimeGetSeconds(range.start);
        float duration = CMTimeGetSeconds(range.duration);
    
        _videoAvailable = start + duration; // this is a float property of my VC
        [self performSelectorOnMainThread:@selector(updateVideoAvailable) withObject:nil waitUntilDone:NO];
    }
    

    Then the selector on the main thread updates a progress bar, like so:

    -(void)updateVideoAvailable {
    
        CMTime playerDuration = [self playerItemDuration];
    double duration = CMTimeGetSeconds(playerDuration);
        _videoAvailableBar.progress = _videoAvailable/duration;// this is a UIProgressView
    }
    
    0 讨论(0)
提交回复
热议问题