Breaking changes:
- BREAKING: dropped support for RTMP, HDS and AkamaiHD streams ([4169](https://github.com/streamlink/streamlink/pull/4169), [#4168](https://github.com/streamlink/streamlink/pull/4168))
- removed the `rtmp://`, `hds://` and `akamaihd://` protocol plugins
- removed all Flash related code
- upgraded all plugins using these old streaming protocols
- dropped RTMPDump dependency
- BREAKING: removed the following CLI arguments (and respective session options): ([4169](https://github.com/streamlink/streamlink/pull/4169), [#4168](https://github.com/streamlink/streamlink/pull/4168))
- `--rtmp-rtmpdump`, `--rtmpdump`, `--rtmp-proxy`, `--rtmp-timeout`
Users of Streamlink's Windows installer will need to update their [config file](https://streamlink.github.io/cli.html#configuration-file).
- `--subprocess-cmdline`, `--subprocess-errorlog`, `--subprocess-errorlog-path`
- `--hds-live-edge`, `--hds-segment-attempts`, `--hds-segment-threads`, `--hds-segment-timeout`, `--hds-timeout`
- BREAKING: switched from HTTP to HTTPS for all kinds of scheme-less input URLs. If a site or http-proxy doesn't support HTTPS, then HTTP needs to be set explicitly. ([4068](https://github.com/streamlink/streamlink/pull/4068), [#4053](https://github.com/streamlink/streamlink/pull/4053))
- BREAKING/API: changed `Session.resolve_url()` and `Session.resolve_url_no_redirect()` to return a tuple of a plugin class and the resolved URL instead of an initialized plugin class instance. This fixes the availability of plugin options in a plugin's constructor. ([4163](https://github.com/streamlink/streamlink/pull/4163))
- BREAKING/requirements: dropped alternative dependency `pycrypto` and removed the `STREAMLINK_USE_PYCRYPTO` env var switch ([4174](https://github.com/streamlink/streamlink/pull/4174))
- BREAKING/requirements: switched from `iso-639`+`iso3166` to `pycountry` and removed the `STREAMLINK_USE_PYCOUNTRY` env var switch ([4175](https://github.com/streamlink/streamlink/pull/4175))
- BREAKING/setup: disabled unsupported Python versions, disabled the deprecated `test` setuptools command, removed the `NO_DEPS` env var, and switched to declarative package data via `setup.cfg` ([4079](https://github.com/streamlink/streamlink/pull/4079), [#4107](https://github.com/streamlink/streamlink/pull/4107), [#4115](https://github.com/streamlink/streamlink/pull/4115), [#4113](https://github.com/streamlink/streamlink/pull/4113))
Release highlights:
- Deprecated: `--https-proxy` in favor of a single `--http-proxy` CLI argument (and respective session option). Both now set the same proxy for all HTTPS/HTTP requests and websocket connections. [`--https-proxy` will be removed in a future release.](https://streamlink.github.io/deprecations.html#streamlink-3-0-0) ([4120](https://github.com/streamlink/streamlink/pull/4120))
- Added: official support for Python 3.10 ([4144](https://github.com/streamlink/streamlink/pull/4144))
- Added: `--twitch-api-header` for only setting Twitch.tv API requests headers (for authentication, etc.) as an alternative to `--http-header` ([4156](https://github.com/streamlink/streamlink/pull/4156))
- Added: BASH and ZSH completions to sdist tarball and wheels. ([4048](https://github.com/streamlink/streamlink/pull/4048), [#4178](https://github.com/streamlink/streamlink/pull/4178))
- Added: support for creating parent directories via metadata variables in file output paths ([4085](https://github.com/streamlink/streamlink/pull/4085))
- Added: new WebsocketClient implementation ([4153](https://github.com/streamlink/streamlink/pull/4153))
- Updated: plugins using websocket connections - nicolive, ustreamtv, twitcasting ([4155](https://github.com/streamlink/streamlink/pull/4155), [#4164](https://github.com/streamlink/streamlink/pull/4164), [#4154](https://github.com/streamlink/streamlink/pull/4154))
- Updated: circumvention for YouTube's age verification ([4058](https://github.com/streamlink/streamlink/pull/4058))
- Updated: and fixed lots of other plugins, see the detailed changelog below
- Reverted: HLS segment downloads always being streamed, and added back `--hls-segment-stream-data` to prevent connection issues ([4159](https://github.com/streamlink/streamlink/pull/4159))
- Fixed: URL percent-encoding for sites which require the lowercase format ([4003](https://github.com/streamlink/streamlink/pull/4003))
- Fixed: XML parsing issues ([4075](https://github.com/streamlink/streamlink/pull/4075))
- Fixed: broken `method` parameter when using the `httpstream://` protocol plugin ([4171](https://github.com/streamlink/streamlink/pull/4171))
- Fixed: test failures when the `brotli` package is installed ([4022](https://github.com/streamlink/streamlink/pull/4022))
- Requirements: bumped `lxml` to `>4.6.4,<5.0` and `websocket-client` to `>=1.2.1,<2.0` ([4143](https://github.com/streamlink/streamlink/pull/4143), [#4153](https://github.com/streamlink/streamlink/pull/4153))
- Windows installer: upgraded Python to `3.9.8` and FFmpeg to `n4.4.1` ([4176](https://github.com/streamlink/streamlink/pull/4176), [#4124](https://github.com/streamlink/streamlink/pull/4124))
- Documentation: upgraded to first stable version of the Furo theme ([4000](https://github.com/streamlink/streamlink/pull/4000))
- New plugins: pandalive ([4064](https://github.com/streamlink/streamlink/pull/4064))
- Removed plugins: tga ([4129](https://github.com/streamlink/streamlink/pull/4129)), viasat ([#4087](https://github.com/streamlink/streamlink/pull/4087)), viutv ([#4018](https://github.com/streamlink/streamlink/pull/4018)), webcast_india_gov ([#4024](https://github.com/streamlink/streamlink/pull/4024))
[Full changelog](https://github.com/streamlink/streamlink/compare/2.4.0...3.0.0)