Check | Message | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Release Notes
Added
- Add
Active Date Range
to block playout template editor to allow limiting templates to a specific date range- This is year-agnostic, meaning the Month/Day range will apply to every year
- This also supports wrapping the end of the year (e.g., start 12/1 and end 1/15)
- Add new
Deco
system for "decorating" channels with non-primary content- Decos currently contain
- Watermarks
- Dead Air Fallback (i.e. fallback filler)
- Similar to blocks, decos have deco groups for organization
- Similar to blocks, decos have deco templates for filling a "day" with decos
- In the playout template editor, playout template items can have both a block template and a deco template
- This allows watermarks and dead air fallback to change at different times than primary content
- Block playouts can also have a default deco
- This will apply whenever a deco template is missing, or when a deco template item cannot be found for the current time
- Effectively, this sets a default watermark and dead air fallback for the entire playout
- Decos currently contain
- Add
XMLTV Days To Build
setting, which is distinct from the existingPlayout Days To Build
setting- The value for
XMLTV Days To Build
cannot be larger thanPlayout Days To Build
- This allows, for example, a week of playout data while optimizing XMLTV data to only a day or two
- The value for
- Add health check to detect config folder issue on MacOS
- ETV versions through v0.8.4-beta (using dotnet 7) stored config data in
$HOME/.local/share/ersatztv
- ETV versions starting with v0.8.5-beta (using dotnet 8) store config data in
$HOME/Library/Application Support/ersatztv
- If a dotnet 8 version of ETV has NOT been launched on MacOS, it will automatically migrate the config folder on startup
- If a dotnet 8 version of ETV has been launched on MacOS, a failing health check will display with instructions on how to resolve the config issue to restore data
- ETV versions through v0.8.4-beta (using dotnet 7) stored config data in
- Add
Video Profile
setting toFFmpeg Profile
editor whenh264
format is selected - Add
Video Preset
setting toFFmpeg Profile
editor for some combinations of acceleration and video format:Nvenc
/h264
Nvenc
/hevc
Qsv
/h264
Qsv
/hevc
None
/h264
None
/hevc
- Add experimental list type
Playlist
- Playlists contain an ordered list of:
- Collections
- Multi-Collections
- Smart Collections
- TV Shows
- TV Seasons
- Artists
- Movies
- Episodes
- Music Videos
- Other Videos
- Songs
- Images
- Playlists can be added to schedules as a schedule item
- Each time through the playlist, one item will be scheduled from each playlist item (if
Play All
is unchecked)- NB: This does not mean every collection will always schedule one item; the normal flood playout restrictions like duration and fixed start times still apply here
- If
Play All
is checked, that playlist item will play all of its items each time through the playlist- This can be helpful if you want to play entire collections in a specific order, e.g.
- Every episode from Show 1 Season 2
- Every episode from Show 2 Season 3
- Every episode from Show 1 Season 3
- This can be helpful if you want to play entire collections in a specific order, e.g.
- Playlist items with fewer media items will be re-shuffled (if applicable) before those with more media items
- Playlists contain an ordered list of:
- Add two new environment variables to customize config and transcode folder locations
ETV_CONFIG_FOLDER
ETV_TRANSCODE_FOLDER
- Add checkbox to allow use of B-frames in FFmpeg Profile (disabled by default)
Fixed
- Fix some cases of 404s from Plex when files were replaced and scanning the library from ETV didn't help
- Fix more wildcard search phrase queries (when wildcards are used in quotes, like
title:"law & order*"
) - Fix non-wildcard simple queries when asterisks are used in quotes, like
title:"m*a*s*h"
- Fix bug where channels would unnecessarily wait on each other
- e.g. in-progress streams would delay responding with a playlist when new streams were starting
- Update Plex show title in ETV when changed in Plex
- Reindex seasons and episodes when show is updated from media server
- This is needed to keep
show_*
tags accurate in the search index (e.g.,show_title
,show_studio
)
- This is needed to keep
- Fix external subtitle detection to support forced/sdh subtitles with language tag before and after forced/sdh tag:
Something.forced.en.srt
Something.sdh.en.srt
Something.en.forced.srt
Something.en.sdh.srt
- Fix playback from Jellyfin 10.9 by allowing playlist HTTP HEAD requests
- Fix
HLS Segmenter V2
segment duration (previously 10s, now 4s) - Fix
HLS Segmenter V2
error video generation - Fix MySql database migrations
- Fix Plex library scans with MySql/MariaDB
- Fix block playout playback when no deco is configured
- Fix
HLS Segmenter V2
to delete old segments (use less disk space while channel is active) - Fix template and deco template editors to prevent items that go beyond midnight
- Fix block playout random seeds
- Different blocks within a single playout will now correctly use different random seeds (shuffles)
- Erasing block playout history will also generate new random seeds for the playout
- Fix building playouts that use mid-roll filler and have content without chapter markers
- When this happens, mid-roll will be treated as post-roll
- Fix VAAPI decoder capability check
- This caused some streams to incorrectly use software decoding
- Fix scheduling loop/failure caused by some duration schedule items
- Fix
video_bit_depth
search field for Plex media - Fix template and deco template editors with MariaDB/MySql backend
- Fix transcoding 10-bit source content using QSV acceleration on Windows
Changed
- Show health checks at top of home page; scroll release notes if needed
- Improve
HLS Segmenter V2
compliance by:- Serving fmp4 segments when
hevc
video format is selected-
1.5. The container format for HEVC video MUST be fMP4.
-
- Using accurate BANDWIDTH value in multi-variant playlist
- Using proper MIME types for statically-served
.m3u8
and.ts
files - Serving playlists with gzip compression
- Serving fmp4 segments when
- Use
HLS Segmenter V2
for channel preview when channel is configured forHLS Segmenter V2
- Detect and use
/dev/dri/card*
devices in addition to/dev/dri/render*
devices - Change default folder locations in docker using new environment variables
ETV_CONFIG_FOLDER
- now defaults to/config
ETV_TRANSCODE_FOLDER
- now defaults to/transcode
- If the old locations are still present in docker, these variables will be ignored, so you can migrate at your own pace
- Old config location:
/root/.local/share/ersatztv
- Old transcode location:
/root/.local/share/etv-transcode
- Old config location:
Full changelog is available on GitHub