Repository: yt-dlp
Issue: yt_dlp.utils.UnavailableVideoError: Unable to download video: [Errno 2] No such file or directory: ...-Frag2318.part'
Labels: site-bug,triage

### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I *intentionally* remove or skip any mandatory\* field

### Checklist

- [X] I'm reporting that yt-dlp is broken on a **supported** site
- [X] I've verified that I'm running yt-dlp version **2023.07.06** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've checked that all provided URLs are playable in a browser with the same IP and same login details
- [X] I've checked that all URLs and arguments with special characters are [properly quoted or escaped](https://github.com/yt-dlp/yt-dlp/wiki/FAQ#video-url-contains-an-ampersand--and-im-getting-some-strange-output-1-2839-or-v-is-not-recognized-as-an-internal-or-external-command)
- [X] I've searched [known issues](https://github.com/yt-dlp/yt-dlp/issues/3766) and the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)
- [X] I've read about [sharing account credentials](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#are-you-willing-to-share-account-details-if-needed) and I'm willing to share it if required

### Region

United States of America

### Provide a description that is worded well enough to be understood

I continue to receive the following type of error months after I first encountered it.  It is triggered by using --live-from-start and happens every half thousand fragments or so.  I have tried several things over the months to fix it, including upgrading.  I prepared for this bug report by first upgrading to the latest.  This happens for practically every live stream I try to download, and in fact, several have been ruined by this.  I had to find a recently started livestream to test it on for documentation, and succeeded.

It makes the following error (ignore the particular video, since it happens on all live videos; I would never watch such content myself):

FileNotFoundError: [Errno 2] No such file or directory: '🔴LIVE： AFS Update 42 - Dragonball Super [PPwUkGFTQps].f299.mp4.part-Frag2318.part'

Debugging said:

yt_dlp.utils.UnavailableVideoError: Unable to download video: [Errno 2] No such file or directory: '🔴LIVE： AFS Update 42 - Dragonball Super [PPwUkGFTQps].f299.mp4.part-Frag2318.part'

I have developed scripts to download the same fragments of the video again and merge the results (even when the live video is so long that the fragment numbers are different in each directory, even if the audio and video offset is different), but that is a nuisance, when yt-dlp could simply do that itself.  The main problem, though, is if I do not catch it in time, and the particular version of video downloaded is no longer available, then I cannot recreate that original quality of video.  It would be far easier for yt-dlp to simply retry itself, rather than me having to develop complicated scripts and procedures to recreate the fragments and merge them, and if this is automated, it would eliminate the irrecoverable data problems from not catching the error in time.

In addition, in the below output, there is another error that has a similar result and should have a similar fix, where it says "Skipping fragment"; there were three instances in this download alone:

[download] fragment not found; Skipping fragment 1881 ...
[download] fragment not found; Skipping fragment 2284 ...
[download] fragment not found; Skipping fragment 4483 ...

In all four cases in this download and in all cases I've experienced, if I always use the options "-k --keep-fragments" and I have a simultaneous download or later download before the livestream data becomes unavailable, and I use my merge scripts, I can always download those "not found" fragments and merge the result, but that is only if I manually catch the errors and manually intervene.  I could create more scripts to hunt for those problems and try to automatically download those pieces, but it almost seems easier to just fix the bug at this point.

This seems like a simple bug to fix, but since I don't know Python, I don't know how to fix it, however, if someone gives me some solid pointers, I could at least try to hack at it to confirm the problem location and come up with a solution.  To me, the solution is simple:  whenever those errors occur, try again to get that fragment.  The whole concept that there's any excuse for yt-dlp to refuse to try that is absurd.  For whatever reason, and I don't care what the reason is, it has trouble, but it has to be done again.  Like I said, this is practically every single live stream.  If you want to start trying to point fingers and blame someone else rather than find a fix, fine, I'll go along with that, but could you please help me try to find a way to provide a fix to this so that I can branch the software to a new branch and figure out how to do it myself so that this problem goes away?  Thank you.

### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [X] If using API, add `'verbose': True` to `YoutubeDL` params instead
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
$ yt-dlp --verbose --live-from-start https://www.youtube.com/watch?v=PPwUkGFTQps
[debug] Command-line config: ['--verbose', '--live-from-start', 'https://www.youtube.com/watch?v=PPwUkGFTQps']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version stable@2023.07.06 [b532a3481] (zip)
[debug] Python 3.10.12 (CPython x86_64 64bit) - Linux-5.4.0-48-lowlatency-x86_64-with-glibc2.35 (OpenSSL 3.0.2 15 Mar 2022, glibc 2.35)
[debug] exe versions: ffmpeg 4.4.2 (setts), ffprobe 4.4.2, phantomjs broken, rtmpdump 2.4
[debug] Optional libraries: Cryptodome-3.18.0, brotli-1.0.9, certifi-2023.07.22, mutagen-1.46.0, pyxattr-0.7.2, secretstorage-3.3.1, sqlite3-2.6.0, websockets-11.0.3
[debug] Proxy map: {}
[debug] Loaded 1864 extractors
[youtube] Extracting URL: https://www.youtube.com/watch?v=PPwUkGFTQps
[youtube] PPwUkGFTQps: Downloading webpage
[youtube] PPwUkGFTQps: Downloading ios player API JSON
[youtube] PPwUkGFTQps: Downloading android player API JSON
[youtube] PPwUkGFTQps: Downloading MPD manifest
[youtube] PPwUkGFTQps: Downloading MPD manifest
[debug] Sort order given by extractor: quality, res, fps, hdr:12, source, vcodec:vp9.2, channels, acodec, lang, proto
[debug] Formats sorted by: hasvid, ie_pref, quality, res, fps, hdr:12(7), source, vcodec:vp9.2(10), channels, acodec, lang, proto, size, br, asr, vext, aext, hasaud, id
[debug] Default format spec: bestvideo*+bestaudio/best
[info] PPwUkGFTQps: Downloading 1 format(s): 299+140
[debug] Invoking dashsegments downloader on "https://manifest.googlevideo.com/api/manifest/dash/expire/1693103276/ei/TGDqZOTVJcjxkga2_r-gBg/ip/71.198.189.102/id/PPwUkGFTQps.1/source/yt_live_broadcast/requiressl/yes/tx/24540602/txs/24540597%2C24540598%2C24540599%2C24540600%2C24540601%2C24540602%2C24540603%2C24540604/hfr/1/as/fmp4_audio_clear%2Cwebm_audio_clear%2Cwebm2_audio_clear%2Cfmp4_sd_hd_clear%2Cwebm2_sd_hd_clear/spc/UWF9fwVmga35oJ4m8yleMoZ4IBaZ5fM/vprv/1/pacing/0/itag_bl/376%2C377%2C384%2C385%2C612%2C613%2C617%2C619%2C623%2C628%2C655%2C656%2C660%2C662%2C666%2C671/keepalive/yes/fexp/24007246%2C51000023/beids/24350017/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Ctx%2Ctxs%2Chfr%2Cas%2Cspc%2Cvprv%2Citag%2Cplaylist_type/sig/AOq0QJ8wRgIhAKlHg6ZMN86hHBLavyy8nzlQc2oeCOfAX73omhbuoSp_AiEA3pfIuCgFIuzHBcjegWpkdniDTnLvokhsrljRy6J0xmM%3D", "https://manifest.googlevideo.com/api/manifest/dash/expire/1693103276/ei/TGDqZOTVJcjxkga2_r-gBg/ip/71.198.189.102/id/PPwUkGFTQps.1/source/yt_live_broadcast/requiressl/yes/tx/24540602/txs/24540597%2C24540598%2C24540599%2C24540600%2C24540601%2C24540602%2C24540603%2C24540604/hfr/1/as/fmp4_audio_clear%2Cwebm_audio_clear%2Cwebm2_audio_clear%2Cfmp4_sd_hd_clear%2Cwebm2_sd_hd_clear/spc/UWF9fwVmga35oJ4m8yleMoZ4IBaZ5fM/vprv/1/pacing/0/itag_bl/376%2C377%2C384%2C385%2C612%2C613%2C617%2C619%2C623%2C628%2C655%2C656%2C660%2C662%2C666%2C671/keepalive/yes/fexp/24007246%2C51000023/beids/24350017/itag/0/playlist_type/DVR/sparams/expire%2Cei%2Cip%2Cid%2Csource%2Crequiressl%2Ctx%2Ctxs%2Chfr%2Cas%2Cspc%2Cvprv%2Citag%2Cplaylist_type/sig/AOq0QJ8wRgIhAKlHg6ZMN86hHBLavyy8nzlQc2oeCOfAX73omhbuoSp_AiEA3pfIuCgFIuzHBcjegWpkdniDTnLvokhsrljRy6J0xmM%3D"
[dashsegments] Total fragments: unknown (live)
[download] Destination: 🔴LIVE： AFS Update 42 - Dragonball Super [PPwUkGFTQps].f299.mp4
[dashsegments] Total fragments: unknown (live)
[download] Destination: 🔴LIVE： AFS Update 42 - Dragonball Super [PPwUkGFTQps].f140.mp4
[debug] [youtube] [PPwUkGFTQps] Generating fragments for format 299
[debug] [youtube] [PPwUkGFTQps] Generating fragments for format 140
[download]   53.71MiB at    1.13MiB/s (00:00:26) (frag 100/227)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   85.92MiB at    2.63MiB/s (00:00:40) (frag 135/227)
[download]  109.23MiB at    2.18MiB/s (00:01:13) (frag 187/227)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]  109.26MiB at    2.16KiB/s (00:01:27) (frag 187/227)
[download]  111.61MiB at    1.65MiB/s (00:01:49) (frag 192/227)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]  219.38MiB at    2.18MiB/s (00:02:34) (frag 323/345)
[download]  320.02MiB at    1.52MiB/s (00:03:30) (frag 420/434)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]    8.78MiB at  126.60KiB/s (00:03:20) (frag 425/428)
[download]  352.95MiB at    2.65MiB/s (00:04:26) (frag 493/493)
[download]  386.08MiB at    3.02MiB/s (00:05:40) (frag 565/565)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]  459.63MiB at    1.88MiB/s (00:07:11) (frag 655/658)
[download]  623.92MiB at    1.91MiB/s (00:09:50) (frag 817/817)
[download]  684.98MiB at    3.34MiB/s (00:10:55) (frag 881/883)
[download]  779.04MiB at    1.78MiB/s (00:13:07) (frag 1011/1014)
[download]  793.74MiB at    1.49MiB/s (00:13:33) (frag 1037/1041)
[download]  804.11MiB at    1.93MiB/s (00:14:10) (frag 1077/1077)
[download]  818.18MiB at    1.93MiB/s (00:14:57) (frag 1123/1124)
[download]  860.82MiB at    6.72MiB/s (00:15:38) (frag 1163/1164)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   23.94MiB at  218.12KiB/s (00:15:33) (frag 1159/1161)
[download]  908.53MiB at 1009.27KiB/s (00:18:29) (frag 1321/1335)
[download]  939.75MiB at    2.09MiB/s (00:19:38) (frag 1404/1404)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]    1.14GiB at   93.48KiB/s (00:22:12) (frag 1555/1559)
[download]    1.17GiB at    270.80B/s (00:23:17) (frag 1589/1593)
[download]    1.21GiB at    2.14KiB/s (00:25:17) (frag 1728/1730)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   35.66MiB at  296.34KiB/s (00:25:00) (frag 1726/1727)
[download]    1.28GiB at    2.68MiB/s (00:27:09) (frag 1856/1857)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   37.97MiB at  133.00KiB/s (00:26:50) (frag 1838/1839)
[download]    1.29GiB at    1.98MiB/s (00:27:38) (frag 1880/1885)[download] Got error: The read operation timed out. Retrying (1/10)...

[download]   39.46MiB at  136.27KiB/s (00:28:02) (frag 1910/1910)

ERROR: Did not get any data blocks
  File "/usr/lib/python3.10/threading.py", line 973, in _bootstrap
    self._bootstrap_inner()
  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.10/threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 83, in _worker
    work_item.run()
  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 394, in thread_func
    return self.download_and_append_fragments(
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 524, in download_and_append_fragments
    download_fragment(fragment, ctx)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 472, in download_fragment
    if not self._download_fragment(
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 124, in _download_fragment
    success, _ = ctx['dl'].download(fragment_filename, fragment_info_dict)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/common.py", line 455, in download
    ret = self.real_download(filename, info_dict)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/http.py", line 365, in real_download
    return download()
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/http.py", line 331, in download
    self.report_error('Did not get any data blocks')
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 1053, in report_error
    self.trouble(f'{self._format_err("ERROR:", self.Styles.ERROR)} {message}', *args, **kwargs)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 981, in trouble
    tb_data = traceback.format_list(traceback.extract_stack())

[download]    1.31GiB at    1.64MiB/s (00:28:25) (frag 1931/1932)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]    1.36GiB at    2.56MiB/s (00:29:08) (frag 1973/1974)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]    1.46GiB at    2.83MiB/s (00:30:32) (frag 2058/2059)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]    1.48GiB at    2.11MiB/s (00:30:57) (frag 2083/2084)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]    1.49GiB at    2.31MiB/s (00:31:23) (frag 2108/2109)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]    1.55GiB at    3.88MiB/s (00:32:33) (frag 2178/2179)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]    1.61GiB at    2.02KiB/s (00:34:22) (frag 2272/2274)
[download]   47.17MiB at  309.10KiB/s (00:34:16) (frag 2283/2284)
ERROR: Did not get any data blocks
  File "/usr/lib/python3.10/threading.py", line 973, in _bootstrap
    self._bootstrap_inner()
  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.10/threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 83, in _worker
    work_item.run()
  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 394, in thread_func
    return self.download_and_append_fragments(
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 524, in download_and_append_fragments
    download_fragment(fragment, ctx)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 472, in download_fragment
    if not self._download_fragment(
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 124, in _download_fragment
    success, _ = ctx['dl'].download(fragment_filename, fragment_info_dict)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/common.py", line 455, in download
    ret = self.real_download(filename, info_dict)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/http.py", line 365, in real_download
    return download()
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/http.py", line 331, in download
    self.report_error('Did not get any data blocks')
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 1053, in report_error
    self.trouble(f'{self._format_err("ERROR:", self.Styles.ERROR)} {message}', *args, **kwargs)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 981, in trouble
    tb_data = traceback.format_list(traceback.extract_stack())

[download] fragment not found; Skipping fragment 2284 ...

[download]    1.64GiB at    3.19MiB/s (00:34:55) (frag 2316/2321)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   47.48MiB at  166.63KiB/s (00:34:43) (frag 2298/2309)
[download]   47.85MiB at  221.93KiB/s (00:35:05) (frag 2316/2332)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   48.70MiB at  205.85KiB/s (00:35:32) (frag 2357/2359)ERROR: Unable to download video: [Errno 2] No such file or directory: '🔴LIVE： AFS Update 42 - Dragonball Super [PPwUkGFTQps].f299.mp4.part-Frag2318.part'
Traceback (most recent call last):
  File "/usr/local/bin/yt-dlp/yt_dlp/networking/_urllib.py", line 352, in read
    return self.fp.read(amt)
  File "/usr/lib/python3.10/http/client.py", line 466, in read
    s = self.fp.read(amt)
  File "/usr/lib/python3.10/socket.py", line 705, in readinto
    return self._sock.recv_into(b)
  File "/usr/lib/python3.10/ssl.py", line 1274, in recv_into
    return self.read(nbytes, buffer)
  File "/usr/lib/python3.10/ssl.py", line 1130, in read
    return self._sslobj.read(len, buffer)
TimeoutError: The read operation timed out

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/http.py", line 247, in download
    data_block = ctx.data.read(block_size if not is_test else min(block_size, data_len - byte_counter))
  File "/usr/local/bin/yt-dlp/yt_dlp/networking/_urllib.py", line 354, in read
    handle_response_read_exceptions(e)
  File "/usr/local/bin/yt-dlp/yt_dlp/networking/_urllib.py", line 373, in handle_response_read_exceptions
    raise TransportError(cause=e) from e
yt_dlp.networking.exceptions.TransportError: The read operation timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 3342, in process_info
    success, real_download = self.dl(temp_filename, info_dict)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 3116, in dl
    return fd.download(name, new_info, subtitle)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/common.py", line 455, in download
    ret = self.real_download(filename, info_dict)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/dash.py", line 60, in real_download
    return self.download_and_append_fragments_multiple(*args, is_fatal=lambda idx: idx == 0)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 430, in download_and_append_fragments_multiple
    result = result and future_result(job)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 413, in future_result
    return future.result()
  File "/usr/lib/python3.10/concurrent/futures/_base.py", line 458, in result
    return self.__get_result()
  File "/usr/lib/python3.10/concurrent/futures/_base.py", line 403, in __get_result
    raise self._exception
  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 394, in thread_func
    return self.download_and_append_fragments(
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 524, in download_and_append_fragments
    download_fragment(fragment, ctx)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 472, in download_fragment
    if not self._download_fragment(
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 124, in _download_fragment
    success, _ = ctx['dl'].download(fragment_filename, fragment_info_dict)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/common.py", line 455, in download
    ret = self.real_download(filename, info_dict)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/http.py", line 365, in real_download
    return download()
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/http.py", line 249, in download
    retry(err)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/http.py", line 241, in retry
    else os.path.getsize(encodeFilename(ctx.tmpfilename)))
  File "/usr/lib/python3.10/genericpath.py", line 50, in getsize
    return os.stat(filename).st_size
FileNotFoundError: [Errno 2] No such file or directory: '🔴LIVE： AFS Update 42 - Dragonball Super [PPwUkGFTQps].f299.mp4.part-Frag2318.part'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 1575, in wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 1731, in __extract_info
    return self.process_ie_result(ie_result, download, extra_info)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 1790, in process_ie_result
    ie_result = self.process_video_result(ie_result, download=download)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 2929, in process_video_result
    self.process_info(new_info)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 3407, in process_info
    raise UnavailableVideoError(err)
yt_dlp.utils.UnavailableVideoError: Unable to download video: [Errno 2] No such file or directory: '🔴LIVE： AFS Update 42 - Dragonball Super [PPwUkGFTQps].f299.mp4.part-Frag2318.part'

[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   53.90MiB at  229.09KiB/s (00:39:43) (frag 2609/2610)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   55.37MiB at  267.22KiB/s (00:40:54) (frag 2680/2681)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   56.53MiB at  168.58KiB/s (00:41:52) (frag 2736/2739)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   57.73MiB at  137.24KiB/s (00:42:48) (frag 2794/2795)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   58.57MiB at  195.29KiB/s (00:43:28) (frag 2835/2837)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   59.67MiB at  225.29KiB/s (00:44:24) (frag 2888/2892)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   64.26MiB at  105.33KiB/s (00:48:05) (frag 3110/3112)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   65.37MiB at    5.54KiB/s (00:49:00) (frag 3164/3168)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   66.55MiB at  200.00KiB/s (00:49:56) (frag 3221/3224)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   67.62MiB at  245.24KiB/s (00:50:47) (frag 3273/3275)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   73.18MiB at  238.20KiB/s (00:55:31) (frag 3542/3556)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   73.53MiB at  205.34KiB/s (00:55:53) (frag 3559/3580)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   74.75MiB at    4.57KiB/s (00:56:35) (frag 3618/3623)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   76.18MiB at  195.80KiB/s (00:57:41) (frag 3687/3689)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   78.90MiB at  266.88KiB/s (00:59:53) (frag 3819/3820)[download] Got error: [Errno 101] Network is unreachable. Retrying (1/10)...
[download]   80.37MiB at  286.72KiB/s (01:01:04) (frag 3890/3891)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   81.65MiB at  103.08KiB/s (01:02:09) (frag 3952/3956)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   82.25MiB at  291.69KiB/s (01:02:35) (frag 3981/3983)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   82.62MiB at  281.30KiB/s (01:02:58) (frag 3999/4003)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   83.41MiB at    4.60KiB/s (01:03:33) (frag 4037/4041)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   83.88MiB at  184.54KiB/s (01:03:56) (frag 4060/4062)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   92.58MiB at  263.95KiB/s (01:10:55) (frag 4481/4483)

ERROR: Did not get any data blocks
  File "/usr/lib/python3.10/threading.py", line 973, in _bootstrap
    self._bootstrap_inner()
  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.10/threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 83, in _worker
    work_item.run()
  File "/usr/lib/python3.10/concurrent/futures/thread.py", line 58, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 394, in thread_func
    return self.download_and_append_fragments(
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 524, in download_and_append_fragments
    download_fragment(fragment, ctx)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 472, in download_fragment
    if not self._download_fragment(
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/fragment.py", line 124, in _download_fragment
    success, _ = ctx['dl'].download(fragment_filename, fragment_info_dict)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/common.py", line 455, in download
    ret = self.real_download(filename, info_dict)
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/http.py", line 365, in real_download
    return download()
  File "/usr/local/bin/yt-dlp/yt_dlp/downloader/http.py", line 331, in download
    self.report_error('Did not get any data blocks')
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 1053, in report_error
    self.trouble(f'{self._format_err("ERROR:", self.Styles.ERROR)} {message}', *args, **kwargs)
  File "/usr/local/bin/yt-dlp/yt_dlp/YoutubeDL.py", line 981, in trouble
    tb_data = traceback.format_list(traceback.extract_stack())

[download] fragment not found; Skipping fragment 4483 ...
[download]   94.24MiB at  263.48KiB/s (01:12:16) (frag 4561/4564)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   97.56MiB at  138.80KiB/s (01:14:57) (frag 4722/4724)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]   98.53MiB at    4.45KiB/s (01:15:47) (frag 4769/4775)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]  100.81MiB at    4.93KiB/s (01:17:37) (frag 4879/4885)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]  101.94MiB at    4.45KiB/s (01:18:33) (frag 4934/4940)[download] Got error: The read operation timed out. Retrying (1/10)...
[download]  104.26MiB at  259.78KiB/s (01:20:20) (frag 5046/5048)^Z
[1]+  Stopped                 yt-dlp --verbose --live-from-start https://www.youtube.com/watch?v=PPwUkGFTQps
$ 
$ 
$ %
yt-dlp --verbose --live-from-start https://www.youtube.com/watch?v=PPwUkGFTQps
[download]  104.38MiB at  250.08KiB/s (01:20:27) (frag 5052/5054)^Z
[1]+  Stopped                 yt-dlp --verbose --live-from-start https://www.youtube.com/watch?v=PPwUkGFTQps
$ echo "Notice how only one of the two streams (of video and audio) is still downloading; that's because the other one already gave up!"
Notice how only one of the two streams (of video and audio) is still downloading; that's because the other one already gave up!
$ echo Watch again:
Watch again:
$ %
yt-dlp --verbose --live-from-start https://www.youtube.com/watch?v=PPwUkGFTQps
[download]  105.41MiB at  278.60KiB/s (01:21:17) (frag 5102/5104)^Z
[1]+  Stopped                 yt-dlp --verbose --live-from-start https://www.youtube.com/watch?v=PPwUkGFTQps
$ echo "It should be two streams."
It should be two streams.
$
```