我使用带有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之间的差异不会改变 .
我的计算出了什么问题?