Force-close each /stream/{channel_id} response instead of allowing
keep-alive reuse. Jellyfin's SharedHttpStream tuner client was reusing
a pooled keep-alive connection mid-stream from an earlier request and
reading raw MPEG-TS bytes as an HTTP status line, failing with
'Received an invalid status line'.
Also broaden the disconnect exception handling to ConnectionAbortedError
alongside ConnectionResetError.
50 lines
1.1 KiB
TOML
50 lines
1.1 KiB
TOML
[project]
|
|
name = "restreamer"
|
|
version = "1.0.0"
|
|
description = "Restreams YouTube livestreams as continuous local streams consumable by Jellyfin Live TV"
|
|
authors = [
|
|
{name = "Jan Doubravsky",email = "jan.doubravsky@gmail.com"}
|
|
]
|
|
license = "MIT"
|
|
readme = "README.md"
|
|
requires-python = ">=3.12,<4.0"
|
|
dependencies = [
|
|
"yt-dlp (>=2026.8.19,<2027.0.0)",
|
|
"aiohttp (>=3.14.3,<4.0.0)",
|
|
"pydantic (>=2)",
|
|
"pydantic-settings (>=2.15.0,<3.0.0)",
|
|
"loguru (>=0.7.3,<0.8.0)",
|
|
"python-dotenv (>=1.2.3,<2.0.0)",
|
|
"pyyaml (>=6.0.3,<7.0.0)"
|
|
]
|
|
|
|
|
|
[build-system]
|
|
requires = ["poetry-core>=2.0.0,<3.0.0"]
|
|
build-backend = "poetry.core.masonry.api"
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"ruff (>=0.16.9,<0.17.0)",
|
|
"mypy (>=2.3.1,<3.0.0)",
|
|
"pytest (>=9.1.1,<10.0.0)",
|
|
"pytest-asyncio (>=1.4.0,<2.0.0)",
|
|
"types-pyyaml (>=6.0.12.20260906,<7.0.0.0)",
|
|
"types-yt-dlp (>=2026.8.19.20260912,<2027.0.0.0)"
|
|
]
|
|
|
|
[tool.poetry]
|
|
packages = [{include = "restreamer", from = "src"}]
|
|
|
|
[tool.ruff]
|
|
line-length = 120
|
|
|
|
[tool.mypy]
|
|
python_version = "3.12"
|
|
strict = true
|
|
mypy_path = "src"
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["tests"]
|
|
asyncio_mode = "auto"
|