Как получить размер файла и текущий размер файла из NSURL для AVPlayer iOS4.0 - PullRequest
1 голос
/ 22 октября 2010
self.player = [[AVPlayer playerWithURL:[NSURL URLWithString:@"http://myurl.com/track.mp3"]] retain];

Я пытаюсь сделать UIProgressView для вышеупомянутой дорожки.Как получить размер файла и текущий размер файла по этому URL?Пожалуйста, помогите, спасибо!

Ответы [ 3 ]

6 голосов
/ 11 августа 2011

Вам нужно начать наблюдать свойствоloadedTimeRanges текущего элемента, например, так:

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

Затем в обратном вызове наблюдения вы понимаете данные, которые вы передаете следующим образом:

-(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];
}

Затем селектор в главном потоке обновляет индикатор выполнения, например:

-(void)updateVideoAvailable {

    CMTime playerDuration = [self playerItemDuration];
double duration = CMTimeGetSeconds(playerDuration);
    _videoAvailableBar.progress = _videoAvailable/duration;// this is a UIProgressView
}
0 голосов
/ 23 июля 2013

@ "loadedTimeRange "- это значение KVO для класса AVPlayerItem. Вы можете найти его определение в файле AVPlayerItem.h в

@interface AVPlayerItem (AVPlayerItemPlayability)

определение категории.

0 голосов
/ 23 октября 2010

Я думаю, вы не хотите ничего знать о размерах файлов, но вас больше интересует время.

Попробуйте self.player.currentItem.asset.duration для продолжительности воспроизводимого в данный момент элемента, self.player.currentTime для текущего времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...