timothy
d6652dbe13
feat(74): selector emits channel-level graphics elements as a base layer
2026-07-22 22:11:46 +02:00
timothy and Claude Opus 4.8
90dc864ce5
fix(473): probe media-server remote streams before handing the URL to ffmpeg
...
Tuning a channel intermittently hard-failed with ffmpeg exit 8 and
`Server returned 404 Not Found` on /media/jellyfin/{itemId}.
Root cause: ValidatePlayoutItemPath checked `File.Exists` on the local
branch, but the three media-server remote-stream branches returned
`http://localhost:{port}/media/{plex,jellyfin,emby}/{id} ` unconditionally.
When the media was gone from the media server too, validation "succeeded"
and ffmpeg was launched against a URL that 404s.
That bypassed the good error path the handler already had
(PlayoutItemDoesNotExistOnDisk renders an error card sized to run until
the NEXT playout item, so the dead item is skipped) and instead landed in
HlsSessionWorker's generic ffmpeg-failure path, which sizes its error card
to the failed 44s work-ahead chunk and then re-selects the SAME broken
item -- a repeating error card for the item's whole slot (~22 min).
Restore the method's own invariant: every PlayoutItemWithPath it returns
has been checked for existence. A definitive 404 now returns the new
PlayoutItemNotAvailableFromMediaServer error, handled in the same switch
arm as PlayoutItemDoesNotExistOnDisk.
The probe is deliberately fail-open: only a 404 reports the media gone.
A timeout, 5xx, auth error or transport failure reports available, so a
probe that cannot answer can never break a tune that would have worked.
That contract is pinned by tests so a later refactor cannot invert it.
Rejected alternatives (see docs/decisions.md): resizing the
HlsSessionWorker retry loop (cannot distinguish a dead item from a
transient transcoder failure -- prod has live VAAPI hwupload -22 failures
that must keep retrying), and writing MediaItemState from the streaming
path (breaks scanner ownership, and would not have fixed this: the item
is RemoteOnly, which PlayoutBuilder's skip does not exclude).
Scanner-side follow-ups filed separately: #476 (FileNotFound does not
cascade show -> episodes, the reason dead items keep being scheduled),
fixes #473
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-07-19 21:41:55 +02:00
Jason Dove and GitHub
0d301df5e8
remove external dependencies (bugsnag, trakt) ( #2840 )
...
* remove bugsnag
* remove trakt client id (that will expire)
2026-02-26 10:43:48 -06:00
Jason Dove and GitHub
0c30c47ba9
nvidia - decode 10-bit h264 in software ( #2833 )
...
* output progress/speed even when copying video
* nvidia - decode 10-bit h264 in software
* fixes
* fix tests
2026-02-20 23:00:15 -06:00
Jason Dove and GitHub
08cbf59527
lower gop size and keyframe interval ( #2832 )
...
* lower gop size and keyframe interval
* update changelog
* fix build using latest dotnet sdk
* fixes
2026-02-19 13:35:27 -06:00
Jason Dove and GitHub
c0b8ff1a06
generate slug instead of probing and transcoding resource ( #2824 )
...
* generate slug instead of probing and using slug resource
* refactor
* more fixes
2026-02-15 09:46:07 -06:00
Jason Dove and GitHub
c6d538e012
add channel slugs ( #2823 )
...
* add channel slugs
* safety
2026-02-14 19:57:35 -06:00
Jason Dove and GitHub
f47134d2d0
log warnings when transcoding speed is potentially insufficient ( #2808 )
...
* refactor parsing ffmpeg progress/speed
* log warnings when transcoding speed is potentially insufficient
* dont log progress on hls direct; fix tests
2026-02-03 08:49:07 -06:00
Jason Dove and GitHub
99b8c56a31
rework fallback filler ( #2719 )
...
* fallback fixes
* use hardware encoding for fallback filler
* rework fallback filler
* fixes
2025-12-13 09:02:48 -06:00
Jason Dove and GitHub
a1f9b86fc1
add download media sample button to playback troubleshooting ( #2709 )
...
* add download media sample button to playback troubleshooting
* fixes
2025-12-09 11:49:07 -06:00
Jason Dove and GitHub
9c23b03758
fix mirror channels ( #2697 )
2025-12-03 09:56:52 -06:00
Jason Dove and GitHub
54606c76f9
framerate improvements ( #2692 )
...
* framerate improvements
* fixes
2025-12-02 12:20:09 -06:00
Jason Dove and GitHub
ec0d8ea6ac
work around sequential schedule validation limit ( #2655 )
...
* remove readalltext
* remove unused method
* remove fileexists
* remove folderexists
* remove readalllines
* remove fake local file system
* show playlist name in playout build errors
* add basic sequential schedule validator tests
* work around sequential schedule validation limit
2025-11-24 12:08:43 -06:00
Jason Dove and GitHub
6603500132
fix content_total_duration in graphics engine ( #2643 )
2025-11-12 20:07:54 -06:00
Jason Dove and GitHub
42b35f7aae
add channel playback troubleshooter ( #2641 )
...
* fix motion graphics loop when seeking
* add channel playback troubleshooter
* fix errors
2025-11-12 13:21:18 -06:00
Jason Dove and GitHub
d0505cd5c5
add better check for interlaced content ( #2620 )
2025-11-10 06:39:04 -06:00
Jason Dove and GitHub
053b3cd1d7
add mpegts script system ( #2609 )
...
* add basic mpegts script
* use custom mpegts script
* update changelog
2025-11-07 13:20:17 -06:00
Jason Dove and GitHub
0dbdcc3674
fix hls direct with jellyfin 10.11 ( #2570 )
2025-10-26 18:09:37 -05:00
Jason Dove and GitHub
3b254735e6
fix transcoding tests; fix vaapi subtitle crop ( #2568 )
...
* fix transcoding tests using text subtitles
* fix vaapi picture subtitle overlay with crop
* more test improvements
2025-10-26 08:51:24 -05:00
Jason Dove and GitHub
2ef2b0299a
switch back from fmp4 to ts segments ( #2554 )
...
* restore pts offset calculation
* use ts segments again
* update changelog
2025-10-21 12:17:05 -05:00
Jason Dove and GitHub
d14ebf3522
properly track discontinuity sequences with fmp4 ( #2548 )
...
* properly track discontinuity sequences with fmp4
* update dependencies
2025-10-19 10:31:11 -05:00
Jason Dove and GitHub
ffe15629cb
consolidate streaming modes ( #2544 )
...
* consolidate segmenters
* let old segmenter mode query params continue to work
2025-10-18 10:54:30 -05:00
Jason Dove and GitHub
f41f4b19d4
wait for two initial segments in playback troubleshooting ( #2532 )
2025-10-14 11:45:11 -05:00
Jason Dove and GitHub
ebcd9a35a7
fix scaling image subs with vaapi ( #2526 )
2025-10-13 19:42:01 -05:00
Jason Dove and GitHub
ea5956a268
improve stream startup ( #2525 )
2025-10-13 16:26:06 -05:00
Jason Dove and GitHub
c39858b2d8
fix hls direct ( #2487 )
2025-10-04 15:36:36 -05:00
Jason Dove and GitHub
b46de50801
add hls segmenter fmp4 streaming mode ( #2468 )
...
* add streaming mode segmenter fmp4
* allow hevc channel preview
2025-09-30 10:04:02 -05:00
Jason Dove and GitHub
b790b5944c
fix external ssa subtitles from media servers ( #2450 )
2025-09-20 21:13:42 +00:00
Jason Dove and GitHub
9e111a103e
fix fallback on mirror channels ( #2436 )
2025-09-17 18:14:25 +00:00
Jason Dove and GitHub
245165c9d9
add rerun collection type ( #2421 )
...
* rename collection type
* split collections into separate pages
* add rerun collection types, migration, editor
* add rerun to classic schedule items
* rerun plumbing in classic playout builder
* start to implement rerun enumerator
* add scheduledAt to enumerator movenext
* maintain rerun history in db
* fix shuffle
* fix rerun allowed playback orders
* fix updating rerun collections
* update changelog; fix editing
* update changelog
2025-09-15 18:27:55 +00:00
Jason Dove and GitHub
bc721755f5
add graphics elements to decos ( #2413 )
...
* add deco graphics elements, selector and tests
* add migrations
* edit deco graphics elements from ui
* update changelog
2025-09-13 15:02:48 +00:00
Jason Dove and GitHub
a2fd23a131
fix deco selection logic ( #2403 )
2025-09-09 18:07:50 +00:00
Jason Dove and GitHub
e96ac0202b
add mirror playout offset ( #2391 )
2025-09-07 16:45:41 +00:00
Jason Dove and GitHub
5e7da19e5e
add channel mirror ( #2390 )
...
* add channel playout source (doesn't do anything yet)
* configure mirror channel
* fix mirror playback
* sync epg for mirror channel
* update changelog
2025-09-07 16:00:27 +00:00
Jason Dove and GitHub
1c07df5bc3
use cancellation tokens in many places ( #2350 )
...
* use cancellation tokens everywhere
* more cancellation tokens
2025-08-27 03:20:35 +00:00
Jason Dove and GitHub
d9f2f51aee
fix fallback filler playback ( #2346 )
2025-08-25 21:56:00 +00:00
Jason Dove and GitHub
0318e71745
refactor watermark selection ( #2328 )
...
* move watermark options into watermark selector
* fix graphics engine overlay performance
* more refactoring
* add some tests for existing watermark selector behavior
* remove extra ffprobe call on all watermarks
* remove a bunch of unused code; add failing tests
* implement new watermark selection
* add tests for new selector
* probably sufficient (though verbose) test coverage
* more tests
* remove some unused code
* simplify watermark selection
* remove old selection code and tests
* more tests
2025-08-18 01:04:36 +00:00
Jason Dove and GitHub
5d081ceeff
fix editorconfig and run code cleanup ( #2324 )
...
* fix formatting rules
* reformat ersatztv
* reformat ersatztv.application
* reformat ersatztv.core
* refactor ersatztv.core.tests
* reformat ersatztv.ffmpeg
* reformat ersatztv.ffmpeg.tests
* reformat ersatztv.infrastructure
* cleanup infra mysql
* cleanup infra sqlite
* cleanup infra tests
* cleanup ersatztv.scanner
* cleanup ersatztv.scanner.tests
* sln cleanup
* update dependencies
2025-08-16 14:44:48 +00:00
Jason Dove and GitHub
0841bc400b
fix saving watermarks and graphics on playout items ( #2313 )
2025-08-13 19:37:46 +00:00
Jason Dove and GitHub
908125f8a9
allow selecting multiple watermarks on decos ( #2287 )
...
* load fonts on demand
* add new table
* populate new table
* edit and use multiple watermarks in deco
* remove old field
* update changelog
2025-08-09 17:00:12 +00:00
Jason Dove and GitHub
075f3fcac7
pass music video variables to text element ( #2285 )
...
* pass music video variables to text element
* remove unused file
2025-08-09 01:29:20 +00:00
Jason Dove and GitHub
f4eadae8ff
set variables from yaml playout graphics_on instruction ( #2284 )
2025-08-08 23:02:13 +00:00
Jason Dove and GitHub
76a589b538
add text graphics element to playback troubleshooting ( #2282 )
...
* refactor graphics engine; async frame generation
* add text graphics element to playback troubleshooting
2025-08-08 19:18:15 +00:00
Jason Dove and GitHub
5a5c049835
support multiple watermarks in yaml schedules ( #2267 )
...
* add multiple watermarks per playout item
* fixes
* update yaml playout watermark to support multiple watermarks
* use graphics engine for intermittent watermarks
2025-08-06 21:22:20 +00:00
Jason Dove and GitHub
a2fc99229e
add watermark opacity expression ( #2266 )
...
* add watermark opacity expression
* implement watermark opacity expression parameters
* minor fixes
2025-08-06 18:26:44 +00:00
Jason Dove and GitHub
036b6e63c7
add new graphics engine ( #2265 )
...
* spike new graphics engine
* fix remote watermarks; add graphics engine to vaapi
* add graphics engine to qsv
2025-08-06 15:04:43 +00:00
Jason Dove and GitHub
b6ec16c6a7
fix transitions using nvidia accel ( #2244 )
2025-08-03 14:14:36 +00:00
Jason Dove and GitHub
1df9104854
add subtitle selection to playback troubleshooting ( #2215 )
2025-07-28 18:44:49 +00:00
Jason Dove and GitHub
6c6ccfa94b
fix seeking with text subtitles ( #2214 )
2025-07-28 16:19:20 +00:00
Jason Dove and GitHub
2257d26173
fix some issues with live stream playback ( #2193 )
2025-07-24 01:58:32 +00:00