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