Restore YouTube schedules, reduce quota usage, and publish tested 1080p tuner images #1

Merged
sayori merged 3 commits from fix/reliable-streams into main 2026-10-01 22:55:45 +02:00
Owner

The five-minute poller exhausted YouTube's search quota and replaced planned broadcasts with an empty guide when requests failed. This change removes search API calls, keeps cached schedules through failures, corrects UTC conversion and XML escaping, and supplies fresh media URLs at tune-in through a stable MPEG-TS endpoint.

Resulting behaviour

  • Discover live/upcoming videos through yt-dlp and batch inexpensive video metadata requests. Idle channels with no tracked events make no metadata requests.
  • Preserve channel mappings, schedules, descriptions, thumbnails, video links, and retry/backoff state across restarts.
  • Prefer 1080p H.264/AAC and remux separate video/audio without routine transcoding. Handle HLS audio that does not declare its codec.
  • Refresh xTeVe/Plex when output changes, retry failures, and avoid logging API keys or signed upstream URLs.
  • Add a health check, concurrent-tuner limit, and per-title estimated duration overrides.

Registry and documentation

Forgejo builds and tests PR images without publishing. After merge, main publishes git.yumeo.dev/sayori/yt2plex-poller:latest and sha-<full-commit>; version-tag pushes publish the version tag. The standard Compose file pulls that image. A separate docker-compose.build.yml supports local development. README and CHANGELOG cover configuration, production deployment, recording limits, and rollback.

Validation

Ten regression tests passed in the built Docker image. A live HTTP playback test returned MPEG-TS with 1920×1080 H.264 video and AAC audio. The first deployment on KLGB1-Plex recovered seven scheduled IMSA broadcasts; xTeVe exported them and Plex indexed the Porsche races and Petit Le Mans. The production poller reported healthy.

Production and rollback

Preserved FIA WEC, IMSA Official, WRC, xTeVe, and both existing Plex guide sources. The private server configuration gives the Petit Le Mans main race a ten-hour estimated duration. Backup of the previous stack and Docker image: /home/administrator/yt2plex-backup-20261001. No credentials are committed.

No automatic recording rules or external notifications were created. YouTube may omit end times; use DVR padding. Uninterrupted race-length recording still needs a real-event test, and upstream restrictions or expiring signatures during an open session may affect playback.

The five-minute poller exhausted YouTube's search quota and replaced planned broadcasts with an empty guide when requests failed. This change removes search API calls, keeps cached schedules through failures, corrects UTC conversion and XML escaping, and supplies fresh media URLs at tune-in through a stable MPEG-TS endpoint. ### Resulting behaviour - Discover live/upcoming videos through yt-dlp and batch inexpensive video metadata requests. Idle channels with no tracked events make no metadata requests. - Preserve channel mappings, schedules, descriptions, thumbnails, video links, and retry/backoff state across restarts. - Prefer 1080p H.264/AAC and remux separate video/audio without routine transcoding. Handle HLS audio that does not declare its codec. - Refresh xTeVe/Plex when output changes, retry failures, and avoid logging API keys or signed upstream URLs. - Add a health check, concurrent-tuner limit, and per-title estimated duration overrides. ### Registry and documentation Forgejo builds and tests PR images without publishing. After merge, main publishes `git.yumeo.dev/sayori/yt2plex-poller:latest` and `sha-<full-commit>`; version-tag pushes publish the version tag. The standard Compose file pulls that image. A separate `docker-compose.build.yml` supports local development. README and CHANGELOG cover configuration, production deployment, recording limits, and rollback. ### Validation Ten regression tests passed in the built Docker image. A live HTTP playback test returned MPEG-TS with 1920×1080 H.264 video and AAC audio. The first deployment on KLGB1-Plex recovered seven scheduled IMSA broadcasts; xTeVe exported them and Plex indexed the Porsche races and Petit Le Mans. The production poller reported healthy. ### Production and rollback Preserved FIA WEC, IMSA Official, WRC, xTeVe, and both existing Plex guide sources. The private server configuration gives the Petit Le Mans main race a ten-hour estimated duration. Backup of the previous stack and Docker image: `/home/administrator/yt2plex-backup-20261001`. No credentials are committed. No automatic recording rules or external notifications were created. YouTube may omit end times; use DVR padding. Uninterrupted race-length recording still needs a real-event test, and upstream restrictions or expiring signatures during an open session may affect playback.
Run CI tests through stdin across the runner Docker boundary
All checks were successful
Build and Push / build-and-push (pull_request) Successful in 2m44s
72fc7d5577
sayori merged commit 0170cc14e0 into main 2026-10-01 22:55:45 +02:00
Author
Owner

Merged into main as 0170cc14e0f6c2bc10705bcbce3ace1a7e3072c9. Publishing run #6 passed all ten tests and published latest plus sha-0170cc14e0f6c2bc10705bcbce3ace1a7e3072c9.

Published image · Updated homelab documentation. README and CHANGELOG on main explain changes, configuration, image updates and recording limits.

Registry migration backup: /home/administrator/yt2plex-registry-backup-20261001; previous working image: yt2plex-poller:pre-registry-20261001. The original pre-fix stack/image backup remains at /home/administrator/yt2plex-backup-20261001. The homelab page includes both rollback contexts.

Merged into main as `0170cc14e0f6c2bc10705bcbce3ace1a7e3072c9`. [Publishing run #6](https://git.yumeo.dev/sayori/YTLive2PlexTV/actions/runs/6) passed all ten tests and published `latest` plus `sha-0170cc14e0f6c2bc10705bcbce3ace1a7e3072c9`. [Published image](https://git.yumeo.dev/sayori/-/packages/container/yt2plex-poller/sha-0170cc14e0f6c2bc10705bcbce3ace1a7e3072c9) · [Updated homelab documentation](https://docs.sayori.me/doc/yt2plex-xteve-ai-zFXr7jbAy3). README and CHANGELOG on main explain changes, configuration, image updates and recording limits. Registry migration backup: `/home/administrator/yt2plex-registry-backup-20261001`; previous working image: `yt2plex-poller:pre-registry-20261001`. The original pre-fix stack/image backup remains at `/home/administrator/yt2plex-backup-20261001`. The homelab page includes both rollback contexts.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
sayori/YTLive2PlexTV!1
No description provided.