fe80Grau / ytdlp2STRM

A little script to serve Youtube / Twitch / Crunchyroll videos without storage it. Uses yt-dlp HTTP data throught Flask and dynamic URLs. We can use this dynamic URLs to set STRM files.
https://github.com/fe80Grau/ytdlp2STRM
MIT License
228 stars 21 forks source link

Internat server error with last update #40

Closed pixelroll closed 6 months ago

pixelroll commented 7 months ago

The web UI shows "Internal Server Error" after the latest update, even on a fresh install with no modifications.

pixelroll commented 7 months ago
[2024-04-21 22:15:09,924] ERROR in app: Exception on / [GET]
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 2528, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1825, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1823, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1799, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/opt/ytdlp2STRM/ui/routes.py", line 18, in index
    plugins=_ui.plugins,
  File "/opt/ytdlp2STRM/ui/ui.py", line 57, in plugins
    config['channels_list_file']
TypeError: 'NoneType' object is not subscriptable
127.0.0.1 - - [21/Apr/2024 22:15:09] "GET / HTTP/1.1" 500 -
fe80Grau commented 7 months ago

Ty @pixelroll fixed with https://github.com/fe80Grau/ytdlp2STRM/commit/5e771d848a55a2d9631b9a482050c280ae61edaf , pushed to last docker image too

pixelroll commented 7 months ago

Ty @pixelroll fixed with 5e771d8 , pushed to last docker image too

the problem is solved but now when I access the web page I have a new error in the logs

avril 22 16:25:39 nas python3[1815007]: 127.0.0.1 - - [22/Apr/2024 16:25:39] "GET /socket.io/?EIO=4&transport=websocket&sid=eH3DV6d5d9eSJOrMAAAc HTTP/1.1" 500 -
avril 22 16:25:39 nas python3[1815007]: Error on request:
avril 22 16:25:39 nas python3[1815007]: Traceback (most recent call last):
avril 22 16:25:39 nas python3[1815007]:   File "/usr/local/lib/python3.9/dist-packages/engineio/async_drivers/_websocket_wsgi.py", line 26, in send
avril 22 16:25:39 nas python3[1815007]:     return self.ws.send(message)
avril 22 16:25:39 nas python3[1815007]:   File "/usr/local/lib/python3.9/dist-packages/simple_websocket/ws.py", line 78, in send
avril 22 16:25:39 nas python3[1815007]:     raise ConnectionClosed(self.close_reason, self.close_message)
avril 22 16:25:39 nas python3[1815007]: simple_websocket.errors.ConnectionClosed: Connection closed: 1001
avril 22 16:25:39 nas python3[1815007]: During handling of the above exception, another exception occurred:
avril 22 16:25:39 nas python3[1815007]: Traceback (most recent call last):
avril 22 16:25:39 nas python3[1815007]:   File "/usr/local/lib/python3.9/dist-packages/werkzeug/serving.py", line 335, in run_wsgi
avril 22 16:25:39 nas python3[1815007]:     execute(self.server.app)
avril 22 16:25:39 nas python3[1815007]:   File "/usr/local/lib/python3.9/dist-packages/werkzeug/serving.py", line 322, in execute
avril 22 16:25:39 nas python3[1815007]:     application_iter = app(environ, start_response)
avril 22 16:25:39 nas python3[1815007]:   File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 2551, in __call__
avril 22 16:25:39 nas python3[1815007]:     return self.wsgi_app(environ, start_response)
avril 22 16:25:39 nas python3[1815007]:   File "/usr/local/lib/python3.9/dist-packages/flask_socketio/__init__.py", line 43, in __call__
avril 22 16:25:39 nas python3[1815007]:     return super(_SocketIOMiddleware, self).__call__(environ,
avril 22 16:25:39 nas python3[1815007]:   File "/usr/local/lib/python3.9/dist-packages/engineio/middleware.py", line 63, in __call__
avril 22 16:25:39 nas python3[1815007]:     return self.engineio_app.handle_request(environ, start_response)
avril 22 16:25:39 nas python3[1815007]:   File "/usr/local/lib/python3.9/dist-packages/socketio/server.py", line 430, in handle_request
avril 22 16:25:39 nas python3[1815007]:     return self.eio.handle_request(environ, start_response)
avril 22 16:25:39 nas python3[1815007]:   File "/usr/local/lib/python3.9/dist-packages/engineio/server.py", line 274, in handle_request
avril 22 16:25:39 nas python3[1815007]:     packets = socket.handle_get_request(
avril 22 16:25:39 nas python3[1815007]:   File "/usr/local/lib/python3.9/dist-packages/engineio/socket.py", line 90, in handle_get_request
avril 22 16:25:39 nas python3[1815007]:     return getattr(self, '_upgrade_' + transport)(environ,
avril 22 16:25:39 nas python3[1815007]:   File "/usr/local/lib/python3.9/dist-packages/engineio/socket.py", line 146, in _upgrade_websocket
avril 22 16:25:39 nas python3[1815007]:     return ws(environ, start_response)
avril 22 16:25:39 nas python3[1815007]:   File "/usr/local/lib/python3.9/dist-packages/engineio/async_drivers/_websocket_wsgi.py", line 15, in __call__
avril 22 16:25:39 nas python3[1815007]:     ret = self.app(self)
avril 22 16:25:39 nas python3[1815007]:   File "/usr/local/lib/python3.9/dist-packages/engineio/socket.py", line 175, in _websocket_handler
avril 22 16:25:39 nas python3[1815007]:     ws.send(packet.Packet(packet.PONG, data='probe').encode())
avril 22 16:25:39 nas python3[1815007]:   File "/usr/local/lib/python3.9/dist-packages/engineio/async_drivers/_websocket_wsgi.py", line 28, in send
avril 22 16:25:39 nas python3[1815007]:     raise IOError()
avril 22 16:25:39 nas python3[1815007]: OSError
fe80Grau commented 7 months ago

Update last commit full reboot the machine (or kill all python process) , check again and tell me

pixelroll commented 7 months ago

Update last commit full reboot the machine (or kill all python process) , check again and tell me

there is always the same error

fe80Grau commented 7 months ago

You may need need to install requierments.txt again, I added some packages and inspecting your error I think you don't have flask_socketio package installed in your system.

pixelroll commented 6 months ago

You may need need to install requierments.txt again, I added some packages and inspecting your error I think you don't have flask_socketio package installed in your system.

I already did it every time I reinstalled the software and I've just done it again, but it doesn't change anything.

pixelroll commented 6 months ago

I have a loop this error too

mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNW&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNZ&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNb&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNc&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNe&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNg&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNj&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNl&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNn&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNo&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNq&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNs&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNu&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNw&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNy&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 -
mai 02 11:50:00 nas python3[786801]: 127.0.0.1 - - [02/May/2024 11:50:00] "GET /socket.io/?EIO=4&transport=polling&t=OyujVNz&sid=QDvUA7e6ndeDgU7bAAAw HTTP/1.1" 200 
fe80Grau commented 6 months ago

This is not an error, just a message indicating that socket.io is active for cli in the web interface. I will try not to show it, by default it is like that with the library

pixelroll commented 6 months ago

This is not an error, just a message indicating that socket.io is active for cli in the web interface. I will try not to show it, by default it is like that with the library

when I try to access an episode

mai 04 19:49:22 nas python3[212777]: Extracting cookies from firefox
mai 04 19:49:22 nas python3[212777]: Extracted 75 cookies from firefox
mai 04 19:49:22 nas python3[212776]: Extracting cookies from firefox
mai 04 19:49:22 nas python3[212776]: Extracted 75 cookies from firefox
mai 04 19:49:22 nas python3[212777]: [crunchyroll] Extracting URL: https://www.crunchyroll.com/fr/watch/GRMGQX55R
mai 04 19:49:22 nas python3[212777]: [crunchyroll] Authenticating with grant_type=etp_rt_cookie
mai 04 19:49:22 nas python3[212776]: [crunchyroll] Extracting URL: https://www.crunchyroll.com/fr/watch/GRMGQX55R
mai 04 19:49:22 nas python3[212776]: [crunchyroll] Authenticating with grant_type=etp_rt_cookie
mai 04 19:49:22 nas python3[212776]: [crunchyroll] GRMGQX55R: Downloading object info JSON (cms)
mai 04 19:49:23 nas python3[212777]: [crunchyroll] GRMGQX55R: Downloading object info JSON (cms)
mai 04 19:49:23 nas python3[212776]: [crunchyroll] Retrieving signed policy
mai 04 19:49:23 nas python3[212777]: [crunchyroll] Retrieving signed policy
mai 04 19:49:23 nas python3[212776]: [crunchyroll] GRMGQX55R: Downloading stream info JSON (signed cms)
mai 04 19:49:23 nas python3[212777]: [crunchyroll] GRMGQX55R: Downloading stream info JSON (signed cms)
mai 04 19:49:24 nas python3[212777]: [crunchyroll] To get all formats of a hardsub language, use "--extractor-args crunchyrollbeta:hardsub=<language_code or all>". See https://github.com/yt-dlp/yt-dlp#crunchyrollbeta-crunchyroll for more info
mai 04 19:49:24 nas python3[212777]: [crunchyroll] GRMGQX55R: Downloading adaptive_hls-hardsub-fr-FR HLS manifest
mai 04 19:49:24 nas python3[212776]: [crunchyroll] To get all formats of a hardsub language, use "--extractor-args crunchyrollbeta:hardsub=<language_code or all>". See https://github.com/yt-dlp/yt-dlp#crunchyrollbeta-crunchyroll for more info
mai 04 19:49:24 nas python3[212776]: [crunchyroll] GRMGQX55R: Downloading adaptive_hls-hardsub-fr-FR HLS manifest
mai 04 19:49:24 nas python3[212777]: [crunchyroll] GRMGQX55R: Downloading chapter info
mai 04 19:49:24 nas python3[212776]: [crunchyroll] GRMGQX55R: Downloading chapter info
mai 04 19:49:24 nas python3[212776]: ERROR: [crunchyroll] GRMGQX55R: Requested format is not available. Use --list-formats for a list of available formats
mai 04 19:49:24 nas python3[212777]: ERROR: [crunchyroll] GRMGQX55R: Requested format is not available. Use --list-formats for a list of available formats
mai 04 19:49:24 nas python3[214068]: ffmpeg version 4.3.6-0+deb11u1 Copyright (c) 2000-2023 the FFmpeg developers
mai 04 19:49:24 nas python3[214068]:   built with gcc 10 (Debian 10.2.1-6)
mai 04 19:49:24 nas python3[214068]:   configuration: --prefix=/usr --extra-version=0+deb11u1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
mai 04 19:49:24 nas python3[214068]:   libavutil      56. 51.100 / 56. 51.100
mai 04 19:49:24 nas python3[214068]:   libavcodec     58. 91.100 / 58. 91.100
mai 04 19:49:24 nas python3[214068]:   libavformat    58. 45.100 / 58. 45.100
mai 04 19:49:24 nas python3[214068]:   libavdevice    58. 10.100 / 58. 10.100
mai 04 19:49:24 nas python3[214068]:   libavfilter     7. 85.100 /  7. 85.100
mai 04 19:49:24 nas python3[214068]:   libavresample   4.  0.  0 /  4.  0.  0
mai 04 19:49:24 nas python3[214068]:   libswscale      5.  7.100 /  5.  7.100
mai 04 19:49:24 nas python3[214068]:   libswresample   3.  7.100 /  3.  7.100
mai 04 19:49:24 nas python3[214068]:   libpostproc    55.  7.100 / 55.  7.100
mai 04 19:49:24 nas python3[214068]: /opt/ytdlp2STRM/temp/fr_watch_GRMGQX55R.mp4: No such file or directory
mai 04 19:49:24 nas python3[77764]: [2024-05-04 19:49:24,871] ERROR in app: Exception on /crunchyroll/direct/fr_watch_GRMGQX55R [GET]
mai 04 19:49:24 nas python3[77764]: Traceback (most recent call last):
mai 04 19:49:24 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 2528, in wsgi_app
mai 04 19:49:24 nas python3[77764]:     response = self.full_dispatch_request()
mai 04 19:49:24 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1825, in full_dispatch_request
mai 04 19:49:24 nas python3[77764]:     rv = self.handle_user_exception(e)
mai 04 19:49:24 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1823, in full_dispatch_request
mai 04 19:49:24 nas python3[77764]:     rv = self.dispatch_request()
mai 04 19:49:24 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 1799, in dispatch_request
mai 04 19:49:24 nas python3[77764]:     return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
mai 04 19:49:24 nas python3[77764]:   File "/opt/ytdlp2STRM/plugins/crunchyroll/routes.py", line 7, in crunchyroll_direct
mai 04 19:49:24 nas python3[77764]:     return direct(crunchyroll_id)
mai 04 19:49:24 nas python3[77764]:   File "/opt/ytdlp2STRM/plugins/crunchyroll/crunchyroll.py", line 322, in direct
mai 04 19:49:24 nas python3[77764]:     return download(crunchyroll_id)
mai 04 19:49:24 nas python3[77764]:   File "/opt/ytdlp2STRM/plugins/crunchyroll/crunchyroll.py", line 389, in download
mai 04 19:49:24 nas python3[77764]:     preprocess_video(
mai 04 19:49:24 nas python3[77764]:   File "/opt/ytdlp2STRM/plugins/crunchyroll/crunchyroll.py", line 343, in preprocess_video
mai 04 19:49:24 nas python3[77764]:     ffmpeg.output(
mai 04 19:49:24 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/ffmpeg/_run.py", line 325, in run
mai 04 19:49:24 nas python3[77764]:     raise Error('ffmpeg', out, err)
mai 04 19:49:24 nas python3[77764]: ffmpeg._run.Error: ffmpeg error (see stderr output for detail)
mai 04 19:49:24 nas python3[77764]: 127.0.0.1 - - [04/May/2024 19:49:24] "GET /crunchyroll/direct/fr_watch_GRMGQX55R HTTP/1.1" 500 -
mai 04 19:49:35 nas python3[77764]: 127.0.0.1 - - [04/May/2024 19:49:35] "POST /socket.io/?EIO=4&transport=polling&t=Oz4kS1d&sid=YJjOPfvm47ynWxqMAAAc HTTP/1.1" 200 -
mai 04 19:49:35 nas python3[77764]: Error on request:
mai 04 19:49:35 nas python3[77764]: Traceback (most recent call last):
mai 04 19:49:35 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/engineio/async_drivers/_websocket_wsgi.py", line 26, in send
mai 04 19:49:35 nas python3[77764]:     return self.ws.send(message)
mai 04 19:49:35 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/simple_websocket/ws.py", line 78, in send
mai 04 19:49:35 nas python3[77764]:     raise ConnectionClosed(self.close_reason, self.close_message)
mai 04 19:49:35 nas python3[77764]: simple_websocket.errors.ConnectionClosed: Connection closed: 1005
mai 04 19:49:35 nas python3[77764]: During handling of the above exception, another exception occurred:
mai 04 19:49:35 nas python3[77764]: Traceback (most recent call last):
mai 04 19:49:35 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/werkzeug/serving.py", line 335, in run_wsgi
mai 04 19:49:35 nas python3[77764]:     execute(self.server.app)
mai 04 19:49:35 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/werkzeug/serving.py", line 322, in execute
mai 04 19:49:35 nas python3[77764]:     application_iter = app(environ, start_response)
mai 04 19:49:35 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/flask/app.py", line 2551, in __call__
mai 04 19:49:35 nas python3[77764]:     return self.wsgi_app(environ, start_response)
mai 04 19:49:35 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/flask_socketio/__init__.py", line 43, in __call__
mai 04 19:49:35 nas python3[77764]:     return super(_SocketIOMiddleware, self).__call__(environ,
mai 04 19:49:35 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/engineio/middleware.py", line 63, in __call__
mai 04 19:49:35 nas python3[77764]:     return self.engineio_app.handle_request(environ, start_response)
mai 04 19:49:35 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/socketio/server.py", line 430, in handle_request
mai 04 19:49:35 nas python3[77764]:     return self.eio.handle_request(environ, start_response)
mai 04 19:49:35 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/engineio/server.py", line 274, in handle_request
mai 04 19:49:35 nas python3[77764]:     packets = socket.handle_get_request(
mai 04 19:49:35 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/engineio/socket.py", line 90, in handle_get_request
mai 04 19:49:35 nas python3[77764]:     return getattr(self, '_upgrade_' + transport)(environ,
mai 04 19:49:35 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/engineio/socket.py", line 146, in _upgrade_websocket
mai 04 19:49:35 nas python3[77764]:     return ws(environ, start_response)
mai 04 19:49:35 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/engineio/async_drivers/_websocket_wsgi.py", line 15, in __call__
mai 04 19:49:35 nas python3[77764]:     ret = self.app(self)
mai 04 19:49:35 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/engineio/socket.py", line 175, in _websocket_handler
mai 04 19:49:35 nas python3[77764]:     ws.send(packet.Packet(packet.PONG, data='probe').encode())
mai 04 19:49:35 nas python3[77764]:   File "/usr/local/lib/python3.9/dist-packages/engineio/async_drivers/_websocket_wsgi.py", line 28, in send
mai 04 19:49:35 nas python3[77764]:     raise IOError()
mai 04 19:49:35 nas python3[77764]: OSError
fe80Grau commented 6 months ago

Hi @pixelroll , since the last update of Crunchyroll endpoints, yd-dlp only works with the login method, cookies are no longer useful. Now only works with login and download mode. https://github.com/fe80Grau/ytdlp2STRM/issues/36 https://github.com/fe80Grau/ytdlp2STRM/issues/43