@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
@@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- A config file named `{channel_number}.json` (e.g. `1.json`) will apply to the channel with that number
- Channel overlays will override values from the default overlay which will override values from the FFmpeg Profile
- Add `epg_entries` support to image graphics elements
- Add (date-range based) alternate schedule system for sequential schedules
### Fixed
- Fix HLS Direct playback when JWT auth is also used
@ -26,6 +27,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
@@ -26,6 +27,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Use `und` language tag with sidecar subtitles that have no language in the file name
- Automatically remove already-played playout items from all on demand channels
- Automatically remove already-played playout items from (continuous) scripted schedules
- Extract embedded text subtitles (when enabled in settings) on channels that use custom stream selectors
- Fix subtitle playback using Next streaming engine
### Changed
- Upgrade Intel driver in docker containers to support latest Battlemage devices (e.g. B70)
@ -91,7 +91,8 @@ public class ExtractEmbeddedSubtitlesHandler : ExtractEmbeddedSubtitlesHandlerBa
@@ -91,7 +91,8 @@ public class ExtractEmbeddedSubtitlesHandler : ExtractEmbeddedSubtitlesHandlerBa
@ -103,7 +104,8 @@ public class ExtractEmbeddedSubtitlesHandler : ExtractEmbeddedSubtitlesHandlerBa
@@ -103,7 +104,8 @@ public class ExtractEmbeddedSubtitlesHandler : ExtractEmbeddedSubtitlesHandlerBa
@ -5,6 +5,7 @@ using ErsatzTV.Core.Domain;
@@ -5,6 +5,7 @@ using ErsatzTV.Core.Domain;
usingErsatzTV.Core.FFmpeg.Selector;
usingErsatzTV.Core.Interfaces.FFmpeg;
usingMicrosoft.Extensions.Logging;
usingMicrosoft.Extensions.Logging.Abstractions;
usingNCalc;
usingYamlDotNet.Serialization;
usingYamlDotNet.Serialization.NamingConventions;
@ -18,8 +19,11 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@@ -18,8 +19,11 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@ -28,11 +32,11 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@@ -28,11 +32,11 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
if(!fileSystem.File.Exists(streamSelectorFile))
{
logger.LogWarning("YAML stream selector file {File} does not exist; aborting.",channel.StreamSelector);
log.LogWarning("YAML stream selector file {File} does not exist; aborting.",channel.StreamSelector);
@ -44,7 +48,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@@ -44,7 +48,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
"Content does not match selector item {@SelectorItem}",
streamSelectorItem);
continue;
@ -122,7 +126,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@@ -122,7 +126,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
{
candidateAudioStreams.Remove(audioStream);
logger.LogDebug(
log.LogDebug(
"Audio stream {@Stream} does not match selector item {@SelectorItem}",
new{Language=safeLanguage,Title=safeTitle},
streamSelectorItem);
@ -131,7 +135,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@@ -131,7 +135,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@ -206,13 +210,15 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@@ -206,13 +210,15 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
}
}
// HLS Direct doesn't need to extract; Next streaming engine doesn't need to extract
"Subtitle {@Subtitle} is embedded text subtitle and NOT extracted; ignoring",
new{Language=safeLanguage,Title=safeTitle});
}
@ -220,7 +226,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@@ -220,7 +226,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
{
candidateSubtitles.Remove(subtitle);
logger.LogDebug(
log.LogDebug(
"Subtitle {@Subtitle} does not match selector item {@SelectorItem}",
new{Language=safeLanguage,Title=safeTitle},
streamSelectorItem);
@ -229,7 +235,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@@ -229,7 +235,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@ -255,7 +261,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@@ -255,7 +261,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@ -325,7 +331,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@@ -325,7 +331,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@ -339,7 +345,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@@ -339,7 +345,7 @@ public class CustomStreamSelector(IFileSystem fileSystem, ILogger<CustomStreamSe
@ -132,7 +132,8 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService
@@ -132,7 +132,8 @@ public class FFmpegLibraryProcessService : IFFmpegProcessService