我使用带有HLS流的AVPlayer . 我需要从玩家当前时间缓冲持续时间 .

这是我用来计算它的代码:

AVPlayer * player = (AVPlayer *)object;

float bufferSize = ^float(AVPlayerItem *playerItem) {
    CMTime currentItemTime = playerItem.currentTime;
    NSArray* times = playerItem.loadedTimeRanges;
    for (NSValue *value in times) {
        CMTimeRange range;
        [value getValue:&range];
        //  Ignore if current time is out of range
        if (CMTimeRangeContainsTime(range, currentItemTime)) {
            CMTime timeFromRangeStart = CMTimeSubtract(currentItemTime, range.start);
            return CMTimeGetSeconds(range.duration) - CMTimeGetSeconds(timeFromRangeStart);
        }
    }
    return 0;
}(player.currentItem);

一切正常,直到流暂停 . 当它暂停时,currentTime被堆叠,但loadedTimeRange'start'字段正在向前移动 . 当玩家恢复时,'start'比currentTime提前几秒 .

例如,currentTime = 10,loadedTimeRange.start = 15,loadedTimeRange.duration = 8. CurrentTime超出加载的时间范围 . 这导致bufferSize为空 . 但是玩家立即恢复,没有缓冲 . 并且在播放器再次暂停之前,currentTime和loadedTimeRange.start之间的差异不会改变 .

我的计算出了什么问题?