mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-30 22:25:19 +00:00 
			
		
		
		
	[downloader/fragment] More smooth calculations
`downloaded_bytes` is now updated on each fragment progress hook invocation
This commit is contained in:
		| @@ -58,6 +58,11 @@ class FragmentFD(FileDownloader): | ||||
|             'frag_count': total_frags, | ||||
|             'filename': ctx['filename'], | ||||
|             'tmpfilename': ctx['tmpfilename'], | ||||
|             # Total complete fragments downloaded so far in bytes | ||||
|             '_complete_frags_downloaded_bytes': 0, | ||||
|             # Amount of fragment's bytes downloaded by the time of the previous | ||||
|             # frag progress hook invocation | ||||
|             '_prev_frag_downloaded_bytes': 0, | ||||
|         } | ||||
|         start = time.time() | ||||
|         ctx['started'] = start | ||||
| @@ -67,22 +72,27 @@ class FragmentFD(FileDownloader): | ||||
|                 return | ||||
|  | ||||
|             frag_total_bytes = s.get('total_bytes') or 0 | ||||
|             if s['status'] == 'finished': | ||||
|                 state['downloaded_bytes'] += frag_total_bytes | ||||
|                 state['frag_index'] += 1 | ||||
|  | ||||
|             estimated_size = ( | ||||
|                 (state['downloaded_bytes'] + frag_total_bytes) / | ||||
|                 (state['_complete_frags_downloaded_bytes'] + frag_total_bytes) / | ||||
|                 (state['frag_index'] + 1) * total_frags) | ||||
|             time_now = time.time() | ||||
|             state['total_bytes_estimate'] = estimated_size | ||||
|             state['elapsed'] = time_now - start | ||||
|  | ||||
|             if s['status'] != 'finished': | ||||
|             if s['status'] == 'finished': | ||||
|                 state['frag_index'] += 1 | ||||
|                 state['downloaded_bytes'] += frag_total_bytes - state['_prev_frag_downloaded_bytes'] | ||||
|                 state['_complete_frags_downloaded_bytes'] = state['downloaded_bytes'] | ||||
|                 state['_prev_frag_downloaded_bytes'] = 0 | ||||
|             else: | ||||
|                 frag_downloaded_bytes = s['downloaded_bytes'] | ||||
|                 state['downloaded_bytes'] += frag_downloaded_bytes - state['_prev_frag_downloaded_bytes'] | ||||
|                 state['eta'] = self.calc_eta( | ||||
|                     start, time_now, estimated_size, | ||||
|                     state['downloaded_bytes'] + s['downloaded_bytes']) | ||||
|                     state['downloaded_bytes']) | ||||
|                 state['speed'] = s.get('speed') | ||||
|                 state['_prev_frag_downloaded_bytes'] = frag_downloaded_bytes | ||||
|             self._hook_progress(state) | ||||
|  | ||||
|         ctx['dl'].add_progress_hook(frag_progress_hook) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․