Files
Restreamer/CHANGELOG.md
T
Honza 4fbb3e813e Fix stream keep-alive handling; bump to v1.0.0
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.
2026-09-27 18:09:26 +02:00

1.5 KiB

Changelog

All notable changes to this project are documented in this file.

[0.1.0] - Unreleased

Added

  • Initial implementation: yt-dlp based resolver (merging separate video/audio renditions when YouTube serves a live stream split that way), ffmpeg restreaming, per-channel supervisor worker with proactive URL-expiry refresh and reactive restart-with-backoff, broadcast fan-out to multiple HTTP clients, aiohttp server exposing an M3U playlist and per-channel MPEG-TS streams for Jellyfin Live TV.
  • Docker Compose deployment (Dockerfile, docker-compose.yml) and configuration templates (channels.example.yaml, .env.example).
  • Unit test suite covering config parsing, URL expiry parsing, ffmpeg argument building, playlist generation, and broadcast fan-out.

Fixed

  • /stream/{channel_id} now forces the connection closed after each response (Connection: close) instead of allowing keep-alive. Jellyfin's M3U tuner client (SharedHttpStream) was reusing a pooled keep-alive connection still mid-stream from an earlier request and reading raw MPEG-TS bytes as if they were a fresh HTTP response, failing with "Received an invalid status line".
  • The yt-dlp resolver now correctly classifies which of the two requested_formats entries is audio when a live stream is split into separate video-only and audio-only renditions; it previously relied on acodec being set, which yt-dlp does not consistently do for audio-only formats, causing every resolve to fail.