streamlink 8.6.2__tar.gz → 8.6.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {streamlink-8.6.2 → streamlink-8.6.3}/CHANGELOG.md +10 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/PKG-INFO +2 -2
- {streamlink-8.6.2 → streamlink-8.6.3}/build_backend/test_plugins_json.py +3 -3
- {streamlink-8.6.2 → streamlink-8.6.3}/completions/bash/streamlink +6 -1
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_build/man/streamlink.1 +1 -1
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/changelog.md +10 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/install.rst +12 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/pyproject.toml +20 -3
- {streamlink-8.6.2 → streamlink-8.6.3}/setup.py +1 -1
- streamlink-8.6.3/src/streamlink/_version.py +1 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/youtube.py +1 -3
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/session/http.pyi +8 -23
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/dash/manifest.py +1 -1
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/wrappers.py +2 -3
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/crypto.py +2 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/dataclass.py +2 -4
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink.egg-info/PKG-INFO +2 -2
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink.egg-info/requires.txt +1 -1
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/compat.py +1 -1
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/console/progress.py +1 -1
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/console/stream.py +1 -1
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/console/stream_wrapper.py +1 -1
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/main.py +28 -9
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/console/test_stream_wrapper.py +1 -1
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_handle_url.py +2 -2
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/test_argparser.py +4 -2
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/mixins/stream_hls.py +2 -1
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/session/test_http.py +3 -2
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/hls/test_hls.py +136 -114
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/webbrowser/test_chromium.py +2 -1
- streamlink-8.6.2/src/streamlink/_version.py +0 -1
- {streamlink-8.6.2 → streamlink-8.6.3}/AUTHORS +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/LICENSE +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/MANIFEST.in +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/README.md +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/build_backend/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/build_backend/commands.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/build_backend/onbuild.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/build_backend/plugins_json.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/build_backend/test_build_backend.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/build_backend/test_onbuild.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/completions/fish/streamlink.fish +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/completions/zsh/_streamlink +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/Makefile +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_man.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_static/apple-touch-icon.png +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_static/favicon-16x16.png +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_static/favicon-32x32.png +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_static/favicon.ico +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_static/github-lockup-dark.svg +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_static/github-lockup-light.svg +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_static/icon-ffmpeg.svg +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_static/icon-python.svg +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_static/icon.svg +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_static/jetbrains-mono-black.svg +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_static/jetbrains-mono-white.svg +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_static/opengraph-image.png +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_static/site.webmanifest +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_static/styles/custom.css +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_templates/base.html +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_templates/page.html +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_templates/sidebar/brand.html +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/_templates/sidebar/github-buttons.html +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/acknowledgements.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/api/cache.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/api/exceptions.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/api/options.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/api/plugin.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/api/session.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/api/stream.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/api/streamlink.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/api/validate.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/api/webbrowser.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/api.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/api_guide/quickstart.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/api_guide/validate.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/api_guide.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/applications.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/cli/config.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/cli/metadata.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/cli/plugin-sideloading.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/cli/plugins/twitch.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/cli/plugins.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/cli/protocols.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/cli/proxy.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/cli/tutorial.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/cli.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/conf.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/deprecations.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/developing.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/docutils.conf +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/index.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/migrations.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/players.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/plugins.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/sphinxext/ext_argparse.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/sphinxext/ext_github.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/sphinxext/ext_html_template_vars.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/sphinxext/ext_plugins.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/sphinxext/ext_releaseref.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/support.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/docs/thirdparty.rst +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/icon.svg +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/script/build-shell-completions.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/setup.cfg +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/__main__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/api.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/buffers.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/cache.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/compat.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/exceptions.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/logger.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/options.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/packages/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/packages/requests_file.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugin/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugin/api/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugin/api/useragents.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugin/api/validate.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugin/api/webbrowser/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugin/api/webbrowser/aws_waf.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugin/api/websocket.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugin/plugin.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/abematv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/adultswim.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/albavision.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/aloula.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/app17.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/ard_mediathek.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/artetv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/atpchallenger.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/atresplayer.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/bbciplayer.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/bfmtv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/bigo.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/bilibili.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/blasttv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/blazetv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/bloomberg.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/brightcove.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/btv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/cbsnews.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/cdnbg.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/ceskatelevize.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/chzzk.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/cinergroup.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/clubbingtv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/cmmedia.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/cnbce.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/cnews.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/dailymotion.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/dash.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/delfi.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/deutschewelle.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/dlive.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/dogan.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/dogus.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/douyin.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/douyu.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/drdk.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/earthcam.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/euronews.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/facebook.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/filmon.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/goltelevision.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/goodgame.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/googledrive.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/gulli.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/hiplayer.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/hls.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/http.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/htv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/huajiao.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/huya.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/invintus.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/kick.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/kugou.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/livestream.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/lnk.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/lrt.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/ltv_lsm_lv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/mangomolo.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/mdstrm.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/mediaklikk.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/mediavitrina.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/mixcloud.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/mjunoon.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/mrtmk.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/n13tv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/nasaplus.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/nicolive.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/nimotv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/nos.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/nowtvtr.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/nrk.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/okru.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/olympicchannel.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/oneplusone.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/onetv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/openrectv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/pandalive.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/piaulizaportal.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/picarto.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/pixiv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/pluto.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/pluzz.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/radiko.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/raiplay.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/reuters.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/rtpa.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/rtpplay.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/rtve.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/rtvs.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/ruv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/sbscokr.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/showroom.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/soop.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/sportal.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/sportschau.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/ssh101.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/stadium.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/steam.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/streann.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/stv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/svtplay.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/swisstxt.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/telefe.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/telemadrid.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/tf1.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/tiktok.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/turkuvaz.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/tv360.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/tv3cat.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/tv5monde.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/tv8.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/tv999.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/tvazteca.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/tvibo.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/tviplayer.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/tvp.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/tvtoya.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/twitcasting.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/twitch.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/ustreamtv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/ustvnow.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/vidio.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/vimeo.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/vinhlongtv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/vk.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/vkvideolive.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/welt.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/wwenetwork.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/youtvua.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/yupptv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/zattoo.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/zdf_mediathek.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/plugins/zeenews.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/py.typed +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/session/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/session/http.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/session/http_useragents.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/session/options.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/session/plugins.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/session/session.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/dash/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/dash/dash.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/dash/segment.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/ffmpegmux.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/file.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/filtered.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/hls/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/hls/hls.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/hls/m3u8.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/hls/segment.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/http.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/segmented/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/segmented/segment.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/segmented/segmented.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/stream/stream.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/user_input.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/args.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/cache.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/data.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/formatter.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/id3v2.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/l10n.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/module.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/named_pipe.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/num.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/parse.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/path.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/processoutput.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/random.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/socket.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/thread.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/times.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/utils/url.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/validate/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/validate/_exception.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/validate/_schemas.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/validate/_validate.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/validate/_validators.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/client.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/connection.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/browser.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/debugger.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/dom.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/emulation.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/fetch.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/input_.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/inspector.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/io.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/network.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/page.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/runtime.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/security.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/target.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/devtools/util.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/cdp/exceptions.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/chromium.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/exceptions.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink/webbrowser/webbrowser.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink.egg-info/SOURCES.txt +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink.egg-info/dependency_links.txt +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink.egg-info/entry_points.txt +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink.egg-info/top_level.txt +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/__main__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/_parser.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/argparser.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/console/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/console/console.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/console/stream_wrapper.pyi +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/console/terminal.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/console/user_input.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/console/windows.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/constants.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/exceptions.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/output/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/output/abc.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/output/file.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/output/http.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/output/player.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/py.typed +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/show_matchers.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/streamrunner.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/utils/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/utils/formatter.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/utils/path.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/utils/player.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/src/streamlink_cli/utils/versioncheck.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/console/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/console/test_console.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/console/test_progress.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/console/test_stream.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/console/test_terminal.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/console/test_windows.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/conftest.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_can_handle_url.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_check_file_output.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_create_output.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_formatter.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_logging.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_main.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_output_stream.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_output_stream_passthrough.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_player_argv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_resolve_stream_name.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_setup_args.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_setup_config_args.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_setup_plugins.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_setup_session_options.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_show_matchers.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/main/test_version_check.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/output/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/output/test_file.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/output/test_player.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/test_compat.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/test_streamrunner.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/utils/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/utils/test_formatter.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/utils/test_path.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/utils/test_player.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/cli/utils/test_versioncheck.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/conftest.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/mixins/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugin/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugin/override/testplugin.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugin/testplugin.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugin/testplugin_invalid.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugin/testplugin_missing.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/conftest.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_abematv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_adultswim.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_albavision.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_aloula.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_app17.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_ard_mediathek.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_artetv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_atpchallenger.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_atresplayer.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_bbciplayer.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_bfmtv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_bigo.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_bilibili.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_blasttv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_blazetv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_bloomberg.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_brightcove.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_btv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_cbsnews.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_cdnbg.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_ceskatelevize.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_chzzk.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_cinergroup.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_clubbingtv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_cmmedia.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_cnbce.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_cnews.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_dailymotion.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_dash.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_delfi.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_deutschewelle.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_dlive.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_dogan.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_dogus.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_douyin.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_douyu.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_drdk.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_earthcam.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_euronews.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_facebook.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_filmon.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_goltelevision.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_goodgame.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_googledrive.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_gulli.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_hiplayer.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_hls.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_http.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_htv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_huajiao.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_huya.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_invintus.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_kick.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_kugou.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_livestream.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_lnk.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_lrt.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_ltv_lsm_lv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_mangomolo.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_mdstrm.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_mediaklikk.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_mediavitrina.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_mixcloud.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_mjunoon.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_mrtmk.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_n13tv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_nasaplus.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_nicolive.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_nimotv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_nos.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_nowtvtr.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_nrk.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_okru.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_olympicchannel.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_oneplusone.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_onetv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_openrectv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_pandalive.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_piaulizaportal.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_picarto.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_pixiv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_pluto.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_pluzz.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_radiko.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_raiplay.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_reuters.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_rtpa.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_rtpplay.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_rtve.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_rtvs.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_ruv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_sbscokr.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_showroom.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_soop.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_sportal.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_sportschau.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_ssh101.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_stadium.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_steam.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_streann.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_stv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_svtplay.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_swisstxt.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_telefe.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_telemadrid.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_tf1.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_tiktok.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_turkuvaz.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_tv360.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_tv3cat.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_tv5monde.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_tv8.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_tv999.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_tvazteca.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_tvibo.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_tviplayer.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_tvp.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_tvtoya.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_twitcasting.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_twitch.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_ustreamtv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_ustvnow.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_vidio.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_vimeo.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_vinhlongtv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_vk.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_vkvideolive.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_welt.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_wwenetwork.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_youtube.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_youtvua.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_yupptv.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_zattoo.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_zdf_mediathek.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/plugins/test_zeenews.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/cli/config/custom +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/cli/config/primary +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/cli/config/primary.testplugin +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/cli/config/secondary +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/cli/config/secondary.testplugin +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_1.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_10.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_11_static.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_2.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_3.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_8.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_9.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_attribute_namespaces.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_baseurl_nested.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_baseurl_scheme_mismatch.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_baseurl_urljoin.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_dynamic_no_publish_time_timeline_with_start.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_dynamic_no_publish_time_timeline_without_start.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_dynamic_segment_list_no_duration.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_dynamic_segment_list_p1.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_dynamic_segment_list_p2.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_dynamic_segment_list_p3.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_dynamic_segment_list_p4.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_dynamic_segment_list_p5.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_dynamic_timeline_continued_p1.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_dynamic_timeline_continued_p2.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_location_scheme_mismatch.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_no_segment_list_or_template.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_period_selection.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_segment_list.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_segment_scheme_mismatch.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_segments_byterange.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_segments_dynamic_number.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_static_no_publish_time.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_suggested_presentation_delay.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_timeline_gap.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/dash/test_timeline_ids.mpd +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/hls/test_1.m3u8 +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/hls/test_date.m3u8 +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/hls/test_master.m3u8 +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/hls/test_media_language.m3u8 +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/hls/test_media_language_special.m3u8 +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/hls/test_multivariant_bandwidth.m3u8 +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/hls/test_multivariant_twitch_usher_v2.m3u8 +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/hls/test_simple_media.m3u8 +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/resources/hls/test_simple_multivariant.m3u8 +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/session/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/session/test_options.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/session/test_plugins.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/session/test_session.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/conftest.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/dash/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/dash/test_dash.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/dash/test_manifest.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/hls/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/hls/test_hls_filtered.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/hls/test_m3u8.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/test_ffmpegmux.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/test_file.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/test_init.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/test_segmented.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/test_stream_json.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/test_stream_to_url.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/stream/test_stream_wrappers.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/test_api_websocket.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/test_buffers.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/test_cache.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/test_compat.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/test_logger.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/test_options.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/test_plugin.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/test_plugin_userinput.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/test_plugins.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/test_streamlink_api.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/test_validate.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/testutils/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/testutils/handshake.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/testutils/test_handshake.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_args.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_cache.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_crypto.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_data.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_dataclass.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_formatter.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_id3v2.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_init.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_l10n.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_module.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_named_pipe.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_num.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_parse.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_path.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_processoutput.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_random.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_thread.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_times.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/utils/test_url.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/webbrowser/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/webbrowser/cdp/__init__.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/webbrowser/cdp/conftest.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/webbrowser/cdp/test_client.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/webbrowser/cdp/test_connection.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/webbrowser/conftest.py +0 -0
- {streamlink-8.6.2 → streamlink-8.6.3}/tests/webbrowser/test_webbrowser.py +0 -0
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## streamlink 8.6.3 (2026-10-29)
|
|
4
|
+
|
|
5
|
+
- SECURITY: new minor release primarily for Streamlink's Windows / Linux AppImages builds, with `brotli 1.2.1` (via uv.lock) ([`CVE-2026-111497`](https://nvd.nist.gov/vuln/detail/CVE-2026-111497))
|
|
6
|
+
- Fixed: `--retry-streams` and `--retry-max` in external/continuous HTTP output mode when re-fetching ([#7165](https://github.com/streamlink/streamlink/pull/7165))
|
|
7
|
+
- Build: bumped `pycryptodome` version requirements to `>=3.4.3,<5` ([#7167](https://github.com/streamlink/streamlink/pull/7167))
|
|
8
|
+
- Tests: fixed race-conditions in HLS tests ([#7174](https://github.com/streamlink/streamlink/pull/7174), [#7176](https://github.com/streamlink/streamlink/pull/7176))
|
|
9
|
+
|
|
10
|
+
[Full changelog](https://github.com/streamlink/streamlink/compare/8.6.2...8.6.3)
|
|
11
|
+
|
|
12
|
+
|
|
3
13
|
## streamlink 8.6.2 (2026-10-07)
|
|
4
14
|
|
|
5
15
|
- SECURITY: fixed arbitrary local file read via `file://` URLs in DASH `Location` tags (`CVE-2026-TO-BE-ASSIGNED` / [`GHSA-j7pf-m7gx-jr33`](https://github.com/streamlink/streamlink/security/advisories/GHSA-j7pf-m7gx-jr33)) ([`98781761`](https://github.com/streamlink/streamlink/commit/987817618f57b6def852693e4e0a95fd9c8437f2))
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: streamlink
|
|
3
|
-
Version: 8.6.
|
|
3
|
+
Version: 8.6.3
|
|
4
4
|
Summary: Streamlink is a command-line utility that extracts streams from various services and pipes them into a video player of choice.
|
|
5
5
|
Author: Streamlink
|
|
6
6
|
Author-email: streamlink@protonmail.com
|
|
@@ -36,7 +36,7 @@ Requires-Dist: exceptiongroup; python_version < "3.11"
|
|
|
36
36
|
Requires-Dist: isodate
|
|
37
37
|
Requires-Dist: lxml<8,>=5.0.0
|
|
38
38
|
Requires-Dist: pycountry
|
|
39
|
-
Requires-Dist: pycryptodome<
|
|
39
|
+
Requires-Dist: pycryptodome<5,>=3.4.3
|
|
40
40
|
Requires-Dist: PySocks!=1.5.7,>=1.5.6
|
|
41
41
|
Requires-Dist: requests<3,>=2.30.0
|
|
42
42
|
Requires-Dist: trio<1,>=0.25.0; python_version >= "3.13"
|
|
@@ -199,8 +199,8 @@ def test_parse_sequence_or_mapping(parser: type[ast.NodeVisitor], code: str, exp
|
|
|
199
199
|
PluginMatcher(pattern="bar", flags=re.IGNORECASE, priority=None, name=None),
|
|
200
200
|
PluginMatcher(pattern="bar", flags=re.IGNORECASE, priority=None, name=None),
|
|
201
201
|
PluginMatcher(pattern="bar", flags=re.IGNORECASE, priority=None, name=None),
|
|
202
|
-
PluginMatcher(pattern="baz", flags=re.I | re.S | re.X, priority=None, name=None),
|
|
203
|
-
PluginMatcher(pattern="baz", flags=re.I | re.S | re.X, priority=None, name=None),
|
|
202
|
+
PluginMatcher(pattern="baz", flags=re.I | re.S | re.X, priority=None, name=None), # ruff: ignore[regex-flag-alias]
|
|
203
|
+
PluginMatcher(pattern="baz", flags=re.I | re.S | re.X, priority=None, name=None), # ruff: ignore[regex-flag-alias]
|
|
204
204
|
],
|
|
205
205
|
does_not_raise,
|
|
206
206
|
id="pattern",
|
|
@@ -1092,7 +1092,7 @@ def test_plugin(test_plugin_code: str):
|
|
|
1092
1092
|
assert pluginvisitor.matchers == [
|
|
1093
1093
|
PluginMatcher(pattern="https://a", flags=None, priority=None, name=None),
|
|
1094
1094
|
PluginMatcher(pattern="https://b", flags=re.IGNORECASE, priority=PluginMatcher.LOW_PRIORITY, name="b"),
|
|
1095
|
-
PluginMatcher(pattern="https://c", flags=re.
|
|
1095
|
+
PluginMatcher(pattern="https://c", flags=re.IGNORECASE | re.VERBOSE, priority=20, name="c"),
|
|
1096
1096
|
]
|
|
1097
1097
|
assert pluginvisitor.arguments == [
|
|
1098
1098
|
PluginArgument(name="a", type="comma_list_filter", type_kwargs={"acceptable": ["a", "b"]}, default=["a"], help="a"),
|
|
@@ -216,7 +216,12 @@ _shtab_streamlink() {
|
|
|
216
216
|
compgen -W "${current_action_choices[*]}" -- "$completing_word")
|
|
217
217
|
fi
|
|
218
218
|
|
|
219
|
+
if [[ ${#COMPREPLY[@]} = 0 ]]; then
|
|
220
|
+
# native fallback matches are not necessarily filenames (e.g. variables)
|
|
221
|
+
compopt +o filenames 2>/dev/null || : # bash>=4
|
|
222
|
+
fi
|
|
223
|
+
|
|
219
224
|
return 0
|
|
220
225
|
}
|
|
221
226
|
|
|
222
|
-
complete -F _shtab_streamlink streamlink
|
|
227
|
+
complete -o bashdefault -F _shtab_streamlink streamlink
|
|
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
|
27
27
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
28
28
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
|
29
29
|
..
|
|
30
|
-
.TH "STREAMLINK" "1" "Oct
|
|
30
|
+
.TH "STREAMLINK" "1" "Oct 29, 2026" "8.6.3" "Streamlink"
|
|
31
31
|
.SH NAME
|
|
32
32
|
streamlink \- extracts streams from various services and pipes them into a video player of choice
|
|
33
33
|
.SH SYNOPSIS
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## streamlink 8.6.3 (2026-10-29)
|
|
4
|
+
|
|
5
|
+
- SECURITY: new minor release primarily for Streamlink's Windows / Linux AppImages builds, with `brotli 1.2.1` (via uv.lock) ([`CVE-2026-111497`](https://nvd.nist.gov/vuln/detail/CVE-2026-111497))
|
|
6
|
+
- Fixed: `--retry-streams` and `--retry-max` in external/continuous HTTP output mode when re-fetching ([#7165](https://github.com/streamlink/streamlink/pull/7165))
|
|
7
|
+
- Build: bumped `pycryptodome` version requirements to `>=3.4.3,<5` ([#7167](https://github.com/streamlink/streamlink/pull/7167))
|
|
8
|
+
- Tests: fixed race-conditions in HLS tests ([#7174](https://github.com/streamlink/streamlink/pull/7174), [#7176](https://github.com/streamlink/streamlink/pull/7176))
|
|
9
|
+
|
|
10
|
+
[Full changelog](https://github.com/streamlink/streamlink/compare/8.6.2...8.6.3)
|
|
11
|
+
|
|
12
|
+
|
|
3
13
|
## streamlink 8.6.2 (2026-10-07)
|
|
4
14
|
|
|
5
15
|
- SECURITY: fixed arbitrary local file read via `file://` URLs in DASH `Location` tags (`CVE-2026-TO-BE-ASSIGNED` / [`GHSA-j7pf-m7gx-jr33`](https://github.com/streamlink/streamlink/security/advisories/GHSA-j7pf-m7gx-jr33)) ([`98781761`](https://github.com/streamlink/streamlink/commit/987817618f57b6def852693e4e0a95fd9c8437f2))
|
|
@@ -187,6 +187,16 @@ Linux and BSD
|
|
|
187
187
|
- .. code-block:: bash
|
|
188
188
|
|
|
189
189
|
sudo dnf install streamlink
|
|
190
|
+
* - :octicon:`package-dependents` `FreeBSD (pkg)`_
|
|
191
|
+
- .. code-block:: bash
|
|
192
|
+
|
|
193
|
+
pkg install multimedia/streamlink
|
|
194
|
+
|
|
195
|
+
* - :octicon:`package-dependents` `FreeBSD (ports)`_
|
|
196
|
+
- .. code-block:: bash
|
|
197
|
+
|
|
198
|
+
cd /usr/ports/multimedia/streamlink
|
|
199
|
+
make config install clean
|
|
190
200
|
* - :octicon:`package-dependents` `Gentoo Linux`_
|
|
191
201
|
- .. code-block:: bash
|
|
192
202
|
|
|
@@ -223,6 +233,8 @@ Linux and BSD
|
|
|
223
233
|
.. _Debian (sid, testing): https://packages.debian.org/sid/streamlink
|
|
224
234
|
.. _Debian (stable): https://packages.debian.org/trixie-backports/streamlink
|
|
225
235
|
.. _Fedora: https://src.fedoraproject.org/rpms/python-streamlink
|
|
236
|
+
.. _FreeBSD (pkg): https://ports.freebsd.org/cgi/ports.cgi?query=streamlink&stype=name
|
|
237
|
+
.. _FreeBSD (ports): https://www.freshports.org/multimedia/streamlink
|
|
226
238
|
.. _Gentoo Linux: https://packages.gentoo.org/package/net-misc/streamlink
|
|
227
239
|
.. _NixOS: https://github.com/NixOS/nixpkgs/tree/master/pkgs/by-name/st/streamlink
|
|
228
240
|
.. _openSUSE: https://build.opensuse.org/package/show/multimedia:apps/streamlink
|
|
@@ -60,7 +60,7 @@ dependencies = [
|
|
|
60
60
|
"isodate",
|
|
61
61
|
"lxml >=5.0.0,<8",
|
|
62
62
|
"pycountry",
|
|
63
|
-
"pycryptodome >=3.4.3,<
|
|
63
|
+
"pycryptodome >=3.4.3,<5",
|
|
64
64
|
"PySocks >=1.5.6,!=1.5.7",
|
|
65
65
|
"requests >=2.30.0,<3",
|
|
66
66
|
"trio >=0.25.0,<1 ; python_version>='3.13'",
|
|
@@ -108,14 +108,14 @@ test = [
|
|
|
108
108
|
"freezegun >=1.5.0",
|
|
109
109
|
]
|
|
110
110
|
lint = [
|
|
111
|
-
"ruff ==0.
|
|
111
|
+
"ruff ==0.17.3",
|
|
112
112
|
]
|
|
113
113
|
typing = [
|
|
114
114
|
{ include-group = "test" },
|
|
115
115
|
{ include-group = "docs" },
|
|
116
116
|
{ include-group = "script" },
|
|
117
117
|
# tools and typing dependencies
|
|
118
|
-
"ty ==0.0.
|
|
118
|
+
"ty ==0.0.92",
|
|
119
119
|
"mypy[faster-cache] ==2.4.0",
|
|
120
120
|
"typing-extensions >=4.0.0",
|
|
121
121
|
# dependency overrides
|
|
@@ -265,6 +265,12 @@ exclude = [
|
|
|
265
265
|
|
|
266
266
|
[tool.ruff.lint]
|
|
267
267
|
select = [
|
|
268
|
+
"correctness",
|
|
269
|
+
"suspicious",
|
|
270
|
+
# "complexity",
|
|
271
|
+
"performance",
|
|
272
|
+
"style",
|
|
273
|
+
|
|
268
274
|
# pycodestyle
|
|
269
275
|
"E",
|
|
270
276
|
"W",
|
|
@@ -315,15 +321,20 @@ select = [
|
|
|
315
321
|
]
|
|
316
322
|
ignore = [
|
|
317
323
|
"async-function-with-timeout",
|
|
324
|
+
"blind-except",
|
|
318
325
|
"builtin-attribute-shadowing",
|
|
319
326
|
"compare-to-empty-string",
|
|
327
|
+
"escape-sequence-in-docstring",
|
|
320
328
|
"explicit-string-concatenation",
|
|
329
|
+
"math-constant",
|
|
321
330
|
"missing-f-string-syntax",
|
|
322
331
|
"missing-trailing-comma", # already covered by ruff's formatter
|
|
323
332
|
"parenthesize-chained-operators",
|
|
333
|
+
"raise-vanilla-class",
|
|
324
334
|
"redefined-loop-name",
|
|
325
335
|
"return-in-generator",
|
|
326
336
|
"stdlib-module-shadowing",
|
|
337
|
+
"subclass-builtin",
|
|
327
338
|
"unnecessary-collection-call",
|
|
328
339
|
"unnecessary-dunder-call",
|
|
329
340
|
"unsorted-dunder-all",
|
|
@@ -368,6 +379,12 @@ allow-multiline = false
|
|
|
368
379
|
[tool.ty.environment]
|
|
369
380
|
python-platform = "all"
|
|
370
381
|
|
|
382
|
+
[[tool.ty.overrides]]
|
|
383
|
+
include = ["build_backend", "docs", "src", "tests"]
|
|
384
|
+
|
|
385
|
+
[tool.ty.overrides.rules]
|
|
386
|
+
invalid-mutable-override = "ignore" # TODO: don't ignore this rule
|
|
387
|
+
|
|
371
388
|
[tool.ty.src]
|
|
372
389
|
exclude = [
|
|
373
390
|
"src/streamlink/packages/**",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "8.6.3"
|
|
@@ -89,9 +89,7 @@ class YouTube(Plugin):
|
|
|
89
89
|
# translate input URLs to be able to find embedded data and to avoid unnecessary HTTP redirects
|
|
90
90
|
if parsed.netloc == "gaming.youtube.com":
|
|
91
91
|
self.url = urlunparse(parsed._replace(scheme="https", netloc="www.youtube.com"))
|
|
92
|
-
elif self.matches["shorthand"]:
|
|
93
|
-
self.url = self._url_canonical.format(video_id=self.match["video_id"])
|
|
94
|
-
elif self.matches["embed"] and self.match["video_id"]:
|
|
92
|
+
elif self.matches["shorthand"] or self.matches["embed"] and self.match["video_id"]:
|
|
95
93
|
self.url = self._url_canonical.format(video_id=self.match["video_id"])
|
|
96
94
|
elif self.matches["embed"] and self.match["live"]:
|
|
97
95
|
self.url = self._url_channelid_live.format(channel_id=self.match["live"])
|
|
@@ -26,29 +26,14 @@ class _StreamlinkKwargs(TypedDict, total=False):
|
|
|
26
26
|
class _SchemaKwargs(TypedDict):
|
|
27
27
|
schema: Schema
|
|
28
28
|
|
|
29
|
-
class _RequestKwargs(_requeststypes.RequestKwargs, _StreamlinkKwargs):
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
class
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
class
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
class _GetKwargsWithSchema(_requeststypes.GetKwargs, _StreamlinkKwargs, _SchemaKwargs):
|
|
39
|
-
pass
|
|
40
|
-
|
|
41
|
-
class _PostKwargs(_requeststypes.PostKwargs, _StreamlinkKwargs):
|
|
42
|
-
pass
|
|
43
|
-
|
|
44
|
-
class _PostKwargsWithSchema(_requeststypes.PostKwargs, _StreamlinkKwargs, _SchemaKwargs):
|
|
45
|
-
pass
|
|
46
|
-
|
|
47
|
-
class _DataKwargs(_requeststypes.DataKwargs, _StreamlinkKwargs):
|
|
48
|
-
pass
|
|
49
|
-
|
|
50
|
-
class _DataKwargsWithSchema(_requeststypes.DataKwargs, _StreamlinkKwargs, _SchemaKwargs):
|
|
51
|
-
pass
|
|
29
|
+
class _RequestKwargs(_requeststypes.RequestKwargs, _StreamlinkKwargs): ...
|
|
30
|
+
class _RequestKwargsWithSchema(_requeststypes.RequestKwargs, _StreamlinkKwargs, _SchemaKwargs): ...
|
|
31
|
+
class _GetKwargs(_requeststypes.GetKwargs, _StreamlinkKwargs): ...
|
|
32
|
+
class _GetKwargsWithSchema(_requeststypes.GetKwargs, _StreamlinkKwargs, _SchemaKwargs): ...
|
|
33
|
+
class _PostKwargs(_requeststypes.PostKwargs, _StreamlinkKwargs): ...
|
|
34
|
+
class _PostKwargsWithSchema(_requeststypes.PostKwargs, _StreamlinkKwargs, _SchemaKwargs): ...
|
|
35
|
+
class _DataKwargs(_requeststypes.DataKwargs, _StreamlinkKwargs): ...
|
|
36
|
+
class _DataKwargsWithSchema(_requeststypes.DataKwargs, _StreamlinkKwargs, _SchemaKwargs): ...
|
|
52
37
|
|
|
53
38
|
# ----
|
|
54
39
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import io
|
|
2
|
+
from contextlib import suppress
|
|
2
3
|
from threading import Thread
|
|
3
4
|
|
|
4
5
|
from streamlink.buffers import Buffer, RingBuffer
|
|
@@ -81,10 +82,8 @@ class StreamIOThreadWrapper(io.IOBase):
|
|
|
81
82
|
self.buffer.close()
|
|
82
83
|
|
|
83
84
|
if hasattr(self.fd, "close"):
|
|
84
|
-
|
|
85
|
+
with suppress(Exception):
|
|
85
86
|
self.fd.close()
|
|
86
|
-
except Exception:
|
|
87
|
-
pass
|
|
88
87
|
|
|
89
88
|
def __init__(self, session, fd, timeout=30):
|
|
90
89
|
self.buffer = RingBuffer(session.get_option("ringbuffer-size"))
|
|
@@ -14,6 +14,8 @@ try:
|
|
|
14
14
|
from Crypto.Util.Padding import pad, unpad
|
|
15
15
|
except ImportError: # pragma: no cover
|
|
16
16
|
# pycryptodomex (independent of the old PyCrypto library)
|
|
17
|
+
# Support for pycryptodomex ended with pycryptodome 4.0.0.
|
|
18
|
+
# Keep the fallback imports until pycryptodomex is not packaged by major distros anymore.
|
|
17
19
|
from Cryptodome.Cipher import AES, PKCS1_v1_5 # type: ignore
|
|
18
20
|
from Cryptodome.Hash import MD5, SHA256 # type: ignore
|
|
19
21
|
from Cryptodome.PublicKey import RSA # type: ignore
|
|
@@ -17,10 +17,8 @@ if TYPE_CHECKING:
|
|
|
17
17
|
|
|
18
18
|
from _typeshed import DataclassInstance
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
_TFormatters: TypeAlias = dict[type[_Tb], Callable[[_Tb], str]]
|
|
20
|
+
_T = TypeVar("_T")
|
|
21
|
+
_TFormatters: TypeAlias = dict[type[_T], Callable[[_T], str]]
|
|
24
22
|
|
|
25
23
|
|
|
26
24
|
_DEFAULT_FORMATTERS: _TFormatters = {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: streamlink
|
|
3
|
-
Version: 8.6.
|
|
3
|
+
Version: 8.6.3
|
|
4
4
|
Summary: Streamlink is a command-line utility that extracts streams from various services and pipes them into a video player of choice.
|
|
5
5
|
Author: Streamlink
|
|
6
6
|
Author-email: streamlink@protonmail.com
|
|
@@ -36,7 +36,7 @@ Requires-Dist: exceptiongroup; python_version < "3.11"
|
|
|
36
36
|
Requires-Dist: isodate
|
|
37
37
|
Requires-Dist: lxml<8,>=5.0.0
|
|
38
38
|
Requires-Dist: pycountry
|
|
39
|
-
Requires-Dist: pycryptodome<
|
|
39
|
+
Requires-Dist: pycryptodome<5,>=3.4.3
|
|
40
40
|
Requires-Dist: PySocks!=1.5.7,>=1.5.6
|
|
41
41
|
Requires-Dist: requests<3,>=2.30.0
|
|
42
42
|
Requires-Dist: trio<1,>=0.25.0; python_version >= "3.13"
|
|
@@ -9,7 +9,7 @@ except AttributeError: # pragma: no cover
|
|
|
9
9
|
from atexit import register as _atexit_register
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
|
|
12
|
-
stdout = Path(devnull).open("wb")
|
|
12
|
+
stdout = Path(devnull).open("wb") # ruff: ignore[open-file-with-context-handler]
|
|
13
13
|
_atexit_register(stdout.close)
|
|
14
14
|
del _atexit_register
|
|
15
15
|
|
|
@@ -19,7 +19,7 @@ class ConsoleStatusMessage(str):
|
|
|
19
19
|
|
|
20
20
|
|
|
21
21
|
class ConsoleOutputStream(StreamWrapper):
|
|
22
|
-
def __new__(cls, stream: TextIOWrapper) -> ConsoleOutputStream:
|
|
22
|
+
def __new__(cls, stream: TextIOWrapper) -> ConsoleOutputStream: # ruff: ignore[non-self-return-type]
|
|
23
23
|
if stream.isatty():
|
|
24
24
|
if (
|
|
25
25
|
is_win32
|
|
@@ -13,7 +13,7 @@ class StreamWrapper:
|
|
|
13
13
|
def wrap(cls, obj, attr):
|
|
14
14
|
stream = getattr(obj, attr)
|
|
15
15
|
if not isinstance(stream, TextIOWrapper):
|
|
16
|
-
raise
|
|
16
|
+
raise TypeError(f"{stream!r} is not a TextIOWrapper object ({obj!r}, {attr!r})")
|
|
17
17
|
|
|
18
18
|
console_output_stream = cls(stream)
|
|
19
19
|
console_output_stream._wrap(obj, attr)
|
|
@@ -265,6 +265,9 @@ def output_stream_http(
|
|
|
265
265
|
user_agent = server.request.headers.get("User-Agent") or "unknown player"
|
|
266
266
|
log.info(f"Got HTTP request from {user_agent}")
|
|
267
267
|
|
|
268
|
+
retry_streams = args.retry_streams or 10
|
|
269
|
+
retry_max = args.retry_max or 0
|
|
270
|
+
retry_attempts = 0
|
|
268
271
|
stream_fd = prebuffer = None
|
|
269
272
|
while not stream_fd and (not player or player.running):
|
|
270
273
|
try: # ruff: ignore[too-many-statements-in-try-clause]
|
|
@@ -277,20 +280,35 @@ def output_stream_http(
|
|
|
277
280
|
for stream_name in (resolve_stream_name(streams, s) for s in args.stream):
|
|
278
281
|
if stream_name in streams:
|
|
279
282
|
stream = streams[stream_name]
|
|
283
|
+
retry_attempts = 0
|
|
280
284
|
break
|
|
281
285
|
else:
|
|
282
|
-
|
|
283
|
-
|
|
286
|
+
if retry_attempts >= retry_max > 0:
|
|
287
|
+
continuous = False
|
|
288
|
+
break
|
|
289
|
+
log.info(f"Stream not available, re-fetching streams in {retry_streams:.1f} second(s)")
|
|
290
|
+
retry_attempts += 1
|
|
291
|
+
sleep(retry_streams)
|
|
284
292
|
continue
|
|
285
293
|
except PluginError as err:
|
|
286
|
-
|
|
294
|
+
if retry_attempts >= retry_max > 0:
|
|
295
|
+
continuous = False
|
|
296
|
+
break
|
|
297
|
+
log.error(f"Unable to fetch new streams, retrying in {retry_streams:.1f} second(s): {err}")
|
|
298
|
+
retry_attempts += 1
|
|
299
|
+
sleep(retry_streams)
|
|
287
300
|
continue
|
|
288
301
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
302
|
+
for i in range(args.retry_open):
|
|
303
|
+
try:
|
|
304
|
+
log.info(f"Opening stream: {stream_name} ({type(stream).shortname()})")
|
|
305
|
+
stream_fd, prebuffer = open_stream(stream)
|
|
306
|
+
break
|
|
307
|
+
except StreamError as err:
|
|
308
|
+
log.error(f"Try {i + 1}/{args.retry_open}: Could not open stream {stream} ({err})")
|
|
309
|
+
else:
|
|
310
|
+
server.shutdown()
|
|
311
|
+
raise StreamlinkCLIError(f"Could not open stream {stream}, tried {args.retry_open} times, exiting")
|
|
294
312
|
|
|
295
313
|
if stream_fd and prebuffer:
|
|
296
314
|
log.debug("Writing stream to player")
|
|
@@ -298,6 +316,7 @@ def output_stream_http(
|
|
|
298
316
|
try:
|
|
299
317
|
stream_runner.run(prebuffer)
|
|
300
318
|
except OSError as err:
|
|
319
|
+
server.shutdown()
|
|
301
320
|
raise StreamlinkCLIError() from err
|
|
302
321
|
|
|
303
322
|
if not continuous:
|
|
@@ -525,7 +544,7 @@ def fetch_streams_with_retry(plugin: Plugin, interval: float, count: int) -> Map
|
|
|
525
544
|
streams = None
|
|
526
545
|
|
|
527
546
|
if not streams:
|
|
528
|
-
log.info(f"Waiting for streams, retrying every {interval} second(s)")
|
|
547
|
+
log.info(f"Waiting for streams, retrying every {interval:.1f} second(s)")
|
|
529
548
|
attempts = 0
|
|
530
549
|
|
|
531
550
|
while not streams:
|
|
@@ -380,7 +380,7 @@ def test_handle_url_text_output(
|
|
|
380
380
|
(
|
|
381
381
|
"[cli][info] Found matching plugin plugin for URL plugin\n"
|
|
382
382
|
+ "[plugins.plugin][info] plugin log message\n"
|
|
383
|
-
+ "[cli][info] Waiting for streams, retrying every 1 second(s)\n"
|
|
383
|
+
+ "[cli][info] Waiting for streams, retrying every 1.0 second(s)\n"
|
|
384
384
|
+ "error: No playable streams found on this URL: plugin\n"
|
|
385
385
|
),
|
|
386
386
|
id="no-streams",
|
|
@@ -476,7 +476,7 @@ def test_handle_url_text_output(
|
|
|
476
476
|
(
|
|
477
477
|
"[cli][info] Found matching plugin plugin for URL plugin\n"
|
|
478
478
|
+ "[plugins.plugin][info] plugin log message\n"
|
|
479
|
-
+ "[cli][info] Waiting for streams, retrying every 1 second(s)\n"
|
|
479
|
+
+ "[cli][info] Waiting for streams, retrying every 1.0 second(s)\n"
|
|
480
480
|
+ "error: fatal\n"
|
|
481
481
|
),
|
|
482
482
|
id="fatal-plugin-error-on-second-attempt",
|
|
@@ -151,8 +151,10 @@ class TestMatchArgumentOverride:
|
|
|
151
151
|
monkeypatch.setattr("argparse._", null_translations.gettext)
|
|
152
152
|
monkeypatch.setattr("argparse.ngettext", null_translations.ngettext)
|
|
153
153
|
|
|
154
|
-
|
|
155
|
-
|
|
154
|
+
# noinspection nested-decorators
|
|
155
|
+
@pytest.fixture(scope="class")
|
|
156
|
+
@classmethod
|
|
157
|
+
def parser(cls):
|
|
156
158
|
parser = ArgumentParser(exit_on_error=False)
|
|
157
159
|
parser.add_argument("-a", "--one", dest="arg")
|
|
158
160
|
parser.add_argument("-b", "--two", nargs=2)
|
|
@@ -4,6 +4,7 @@ import unittest
|
|
|
4
4
|
from binascii import hexlify
|
|
5
5
|
from functools import partial
|
|
6
6
|
from threading import Event, Thread
|
|
7
|
+
from types import SimpleNamespace
|
|
7
8
|
from typing import TYPE_CHECKING
|
|
8
9
|
from unittest.mock import patch
|
|
9
10
|
|
|
@@ -206,7 +207,7 @@ class TestMixinStreamHLS(unittest.TestCase):
|
|
|
206
207
|
super().__init__(*args, **kwargs)
|
|
207
208
|
# FIXME: fix HTTPSession.request()
|
|
208
209
|
# don't sleep on mocked HTTP request failures
|
|
209
|
-
self._patch_http_retry_sleep = patch("streamlink.session.http.time
|
|
210
|
+
self._patch_http_retry_sleep = patch("streamlink.session.http.time", SimpleNamespace(sleep=lambda _: None))
|
|
210
211
|
self.mocker = requests_mock.Mocker()
|
|
211
212
|
self.mocks = {}
|
|
212
213
|
|
|
@@ -6,6 +6,7 @@ from contextlib import closing, nullcontext
|
|
|
6
6
|
from operator import itemgetter
|
|
7
7
|
from socket import AF_INET, AF_INET6
|
|
8
8
|
from ssl import SSLContext
|
|
9
|
+
from types import SimpleNamespace
|
|
9
10
|
from typing import TYPE_CHECKING, Any
|
|
10
11
|
from unittest.mock import Mock, PropertyMock, call
|
|
11
12
|
|
|
@@ -169,7 +170,7 @@ class TestHTTPSession:
|
|
|
169
170
|
res = method("http://localhost")
|
|
170
171
|
assert isinstance(res, requests.Response)
|
|
171
172
|
assert res.text == "OK"
|
|
172
|
-
assert mocked.
|
|
173
|
+
assert mocked.call_count == 1
|
|
173
174
|
|
|
174
175
|
@pytest.mark.parametrize(
|
|
175
176
|
("params", "expected"),
|
|
@@ -220,7 +221,7 @@ class TestHTTPSession:
|
|
|
220
221
|
def test_read_timeout(self, monkeypatch: pytest.MonkeyPatch):
|
|
221
222
|
mock_sleep = Mock()
|
|
222
223
|
mock_request = Mock(side_effect=requests.Timeout)
|
|
223
|
-
monkeypatch.setattr("streamlink.session.http.time
|
|
224
|
+
monkeypatch.setattr("streamlink.session.http.time", SimpleNamespace(sleep=mock_sleep))
|
|
224
225
|
monkeypatch.setattr("streamlink.session.http.Session.request", mock_request)
|
|
225
226
|
|
|
226
227
|
session = HTTPSession()
|