diff --git a/CHANGELOG.md b/CHANGELOG.md
index cbd1f9e04..d2f00b9fd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -21,6 +21,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Optimize anamorphic pipelines by only performing one scale instead of two
- Optimize tonemapping pipelines by downscaling before tonemapping when possible
- Optimize QSV pipelines by merging consecutive vpp_qsv filters as much as possible (e.g. tonemap, scale and format using a single filter)
+ - Show error messages over black/silence fallback streams by default
+ - To disable, create the file `next/channel-config-overlays/default.json` in ETV's config folder with the contents `{"fallback":{"show_error":false}}`
### Fixed
- Next engine:
diff --git a/ErsatzTV.Application/Streaming/ChannelConfigConverter.cs b/ErsatzTV.Application/Streaming/ChannelConfigConverter.cs
index 7a4a15001..3a54fceb6 100644
--- a/ErsatzTV.Application/Streaming/ChannelConfigConverter.cs
+++ b/ErsatzTV.Application/Streaming/ChannelConfigConverter.cs
@@ -159,6 +159,10 @@ public class ChannelConfigConverter(IConfigElementRepository configElementReposi
Audio = audioNormalization,
Video = videoNormalization,
Subtitle = subtitleNormalization
+ },
+ Fallback = new Fallback
+ {
+ ShowError = true
}
};
}
diff --git a/ErsatzTV.Core/Next/Config/ChannelConfig.cs b/ErsatzTV.Core/Next/Config/ChannelConfig.cs
index ee9792d19..ed67ba790 100644
--- a/ErsatzTV.Core/Next/Config/ChannelConfig.cs
+++ b/ErsatzTV.Core/Next/Config/ChannelConfig.cs
@@ -22,6 +22,10 @@ namespace ErsatzTV.Core.Next.Config
public partial class ChannelConfig
{
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("fallback")]
+ public Fallback? Fallback { get; set; }
+
[JsonPropertyName("ffmpeg")]
public Ffmpeg Ffmpeg { get; set; }
@@ -32,6 +36,21 @@ namespace ErsatzTV.Core.Next.Config
public Playout Playout { get; set; }
}
+ ///
+ /// Controls the content that replaces scheduled content when there is nothing to play
+ /// (a gap in the playout) or when the scheduled item fails
+ ///
+ public partial class Fallback
+ {
+ ///
+ /// Burn the reason for the fallback into the fallback video; this is always burned,
+ /// regardless of the normalization subtitle mode
+ ///
+ [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
+ [JsonPropertyName("show_error")]
+ public bool? ShowError { get; set; }
+ }
+
public partial class Ffmpeg
{
[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]