获取AVPlayer缓冲区大小问题

时间:2018-06-09 09:00:58

标签: ios avplayer hls

我使用带有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之间的差异不会改变。

我的计算有什么问题?

0 个答案:

没有答案