Уверенный Вы могли разделить остающийся размер файла на текущую скорость загрузки, но если Ваша скорость загрузки колеблется (и это будет), это не приводит к очень хорошему результату. Что такое лучший алгоритм для создания более гладких обратных отсчетов?
Я нашел ответ Ben Dolman очень полезным, но для кого-то как я, кто не так математика, наклонил его, все еще взял меня приблизительно час, чтобы полностью реализовать это в мой код. Вот более простой способ сказать то же самое в Python, если существуют какие-либо сообщенные мне погрешности, но в моем тестировании его работает очень хорошо:
def exponential_moving_average(data, samples=0, smoothing=0.02):
'''
data: an array of all values.
samples: how many previous data samples are avraged. Set to 0 to average all data points.
smoothing: a value between 0-1, 1 being a linear average (no falloff).
'''
if len(data) == 1:
return data[0]
if samples == 0 or samples > len(data):
samples = len(data)
average = sum(data[-samples:]) / samples
last_speed = data[-1]
return (smoothing * last_speed) + ((1 - smoothing) * average)
input_data = [4.5, 8.21, 8.7, 5.8, 3.8, 2.7, 2.5, 7.1, 9.3, 2.1, 3.1, 9.7, 5.1, 6.1, 9.1, 5.0, 1.6, 6.7, 5.5, 3.2] # this would be a constant stream of download speeds as you go, pre-defined here for illustration
data = []
ema_data = []
for sample in input_data:
data.append(sample)
average_value = exponential_moving_average(data)
ema_data.append(average_value)
# print it out for visualization
for i in range(len(data)):
print("REAL: ", data[i])
print("EMA: ", ema_data[i])
print("--")