github ErsatzTV/legacy v26.11.0

3 hours ago

Release Notes

Added

  • Next engine:
    • Properly rotate content that contains orientation metadata (e.g. from phones)
    • Add mpeg2video encoder support (software, some Intel QSV and Intel VAAPI devices)
    • Add song playback support, using legacy-generated background image and text
      • Song Video Mode With Progress is not supported yet; these songs play without a progress bar
    • Support FFmpeg Profile Normalize Frame Rate
      • As with the legacy engine, the target is the lowest frame rate above 23 fps among the channel's scheduled items
      • Frames are dropped or duplicated to reach the target, instead of blended
      • With video copy, only items already at the target rate are copied; others are transcoded
  • Add Deep Scan Library button to local libraries
    • A deep scan re-probes every file and refreshes all metadata and artwork, even when files appear unchanged
    • This forces a refresh of e.g. NFO files or posters that were edited without changing their modified time

Changed

  • Migrate all channels to the next streaming engine, and use it by default for new channels
    • To roll back a channel, set Streaming Engine to Legacy in the channel editor
    • Streaming mode MPEG-TS (Legacy) has been migrated to MPEG-TS
    • Streaming mode HLS Direct has been migrated to HLS Segmenter
      • Content is now transcoded continuously; disable Normalize Video or Normalize Audio in the FFmpeg Profile to copy that stream instead
    • Cached ts-legacy and hls-direct URLs continue to work, and stream through the next engine
    • FFmpeg Profiles with audio format aac (latm) now use aac
    • FFmpeg Profiles with V4l2m2m hardware acceleration now use software encoding
    • The next engine ignores these FFmpeg Profile settings: Thread Count, Pad Mode, video Profile, video Preset, Allow B-Frames, VAAPI Display, QSV Extra Hardware Frames and Normalize Colors
      • These settings are now labeled Legacy engine only
    • The next engine ignores channel Slug Seconds, so it is hidden for next channels
    • Playback troubleshooting now defaults to the next engine
  • Use ErsatzTV-ffmpeg 8.1.2-4 in docker images, Windows packages and macOS packages
    • ErsatzTV-ffmpeg releases are now immutable; docker images pin them by digest
    • Docker images no longer include libfdk_aac; the built-in aac encoder is unchanged
    • macOS packages now include ffmpeg and ffprobe, so Homebrew ffmpeg is no longer needed
      • On first start, existing macOS installs switch from their configured ffmpeg and ffprobe paths to the bundled builds
      • The FFmpeg Version health check now applies to macOS
  • Drop support for ARM32v7 docker and native versions
  • Remove av1 video format from FFmpeg Profiles; it has not worked since v25.7.1
    • Existing av1 FFmpeg Profiles have been migrated to hevc
  • Add v prefix to docker version numbers; matching all other versions
  • Develop builds:
  • Local libraries: use video stream duration instead of container duration for scheduling
    • This fixes playback failures caused by e.g. embedded subtitles longer than the video itself
  • Ask for confirmation before deep scanning a library or external collections
  • Next engine:
    • Improve watermark quality with VAAPI and QSV by avoiding an unnecessary lossy color conversion
    • Optimize intermittent watermarks by converting the watermark image once instead of on every frame
    • FFmpeg Profiles with Normalize Video or Normalize Audio disabled now copy that stream; they were previously transcoded to h264 / aac
      • Items that cannot be copied are transcoded using the profile's settings
        • e.g. items with burned-in subtitles, still images, and source codecs that are not copied by default
        • h264 / hevc video can be copied by default, aac / ac3 / eac3 / mp3 audio can be copied by default
        • These items are transcoded without hardware acceleration; to use hardware acceleration, set accel in a channel config overlay
          • e.g. {"version":"https://ersatztv.org/channel/version/0.1.0","normalization":{"video":{"accel":"qsv"}}}
      • Watermarks and graphics are not applied to copied video, matching the legacy engine
      • Loudness normalization is never applied to copied audio
    • BREAKING: channel config overlays (next/channel-config-overlays/default.json and {number}.json in ETV's config folder) must include "version": "https://ersatztv.org/channel/version/0.1.0"
      • Overlays without this version are rejected, and the channel will not start
      • e.g. {"version":"https://ersatztv.org/channel/version/0.1.0","fallback":{"show_error":false}}
      • Overlays that used "format": null to copy should use "mode": "copy" instead

Fixed

  • Next engine:
    • QSV: enable hardware acceleration on legacy Intel Media SDK devices on Windows (e.g. Haswell)
      • Windows packages now include libvpl.dll, which next engine uses to detect QSV capabilities
      • Find the runtime when the Intel GPU is not the primary display adapter, or when the runtime does not report a device ID
      • Fix Error synchronizing the operation: -17 at the start of a stream
      • Fix device failed (-17) from vpp_qsv and overlay_qsv
    • QSV: pad in software when the runtime cannot pad the current pixel format in hardware (e.g. 10-bit on legacy Media SDK runtimes)
    • QSV: do not upload 10-bit frames to hardware on runtimes that cannot copy them (e.g. Haswell)
    • QSV: fix Cannot allocate memory error when using loudness normalization and the graphics engine
    • VideoToolbox: fix HEVC output bit depth not matching the FFmpeg Profile
    • VideoToolbox: fix missing sample aspect ratio in H264 output
    • NVIDIA: fix ffmpeg warning when CUDA and Vulkan are used together
    • Fix AMD VAAPI hardware acceleration when FFmpeg Profile is configured with VAAPI Driver Default
    • Fix performance regression with permanent and intermittent watermarks by overlaying them directly instead of using the graphics engine
    • Fix watermark opacity having no effect on images without transparency (e.g. JPG)
    • Fix subtitle selection preferring embedded text subtitles that have not been extracted
      • These subtitles were selected over usable sidecar subtitles, and then dropped, leaving no subtitles
      • The FFmpeg Use Embedded Subtitles setting is now respected by next engine channels
    • Fix playback of audio-only content (e.g. audio files with embedded cover art), which now plays over a black background
    • Fix image playback
    • Fix image and remote stream duration
    • Fix process signal handling to prevent orphaned processes
      • When ErsatzTV exits unexpectedly (crash, killed), next engine channels now stop within a few seconds instead of running for up to 90 seconds
      • When a next engine channel process is killed, its ffmpeg process now stops too (Linux and Windows)
      • Stopping a next engine channel with SIGTERM or SIGINT now also stops its ffmpeg process
    • Fix channels going permanently empty when content ends before its scheduled duration
      • e.g. files with an embedded subtitle track that runs longer than the audio and video
      • The rest of the scheduled time now plays the black/silence fallback
      • Fix audio/video sync loss at the end of such content
    • Fix timestamps restarting at zero between items when ffprobe is not on the system PATH
    • Ignore unextracted text subtitles when using custom stream selector
    • Fix channel playback troubleshooting, which always used the legacy engine
      • Channel troubleshooting plays 30 seconds from the selected time, including transitions between items and fallback filler for gaps
    • Fix troubleshooting playback stopping before the end of the transcoded content
  • Improve performance of graphics engine subtitle elements
  • Fix Jellyfin 12 shows that belong to a Jellyfin collection being replaced by the collection itself
    • The collection would appear as a show, and the real show would be flagged as missing
    • To repair affected libraries after updating:
      • Scan the affected Jellyfin show libraries
      • Empty the trash to remove the bogus collection shows
      • Deep scan Jellyfin collections to restore collection search results
  • Fix Unified Docker health check incorrectly warning about a deprecated docker tag on arm64 hardware using the default docker image
  • Fix bug where block schedules could skip and/or repeat items
  • Fix songs changing their background ~40 seconds after joining a channel
  • Fix troubleshooting playback to start exactly at the specified seek point (hls.js player often started a segment or two late)

Don't miss a new legacy release

NewReleases is sending notifications on new releases.