From 6ffa9539bbfbfb1090b02cebc8a28283a8c69041 Mon Sep 17 00:00:00 2001 From: cvium Date: Tue, 11 Jan 2022 23:30:30 +0100 Subject: Refactor and add scheduled task --- .../Extractors/MatroskaKeyframeExtractor.cs | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs (limited to 'src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs') diff --git a/src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs b/src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs new file mode 100644 index 000000000..ee370fb01 --- /dev/null +++ b/src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs @@ -0,0 +1,48 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using Jellyfin.MediaEncoding.Keyframes; +using Microsoft.Extensions.Logging; +using Extractor = Jellyfin.MediaEncoding.Keyframes.Matroska.MatroskaKeyframeExtractor; + +namespace Jellyfin.MediaEncoding.Hls.Extractors; + +/// +public class MatroskaKeyframeExtractor : IKeyframeExtractor +{ + private readonly ILogger _logger; + + /// + /// Initializes a new instance of the class. + /// + /// An instance of the interface. + public MatroskaKeyframeExtractor(ILogger logger) + { + _logger = logger; + } + + /// + public bool IsMetadataBased => true; + + /// + public bool TryExtractKeyframes(string filePath, [NotNullWhen(true)] out KeyframeData? keyframeData) + { + if (filePath.AsSpan().EndsWith(".mkv", StringComparison.OrdinalIgnoreCase)) + { + keyframeData = null; + return false; + } + + try + { + keyframeData = Extractor.GetKeyframeData(filePath); + return keyframeData.KeyframeTicks.Count > 0; + } + catch (Exception ex) + { + _logger.LogError(ex, "Extracting keyframes from {FilePath} using matroska metadata failed", filePath); + } + + keyframeData = null; + return false; + } +} -- cgit v1.2.3 From 7ba9a24736a98b7b78c5241d03ed331a74517c58 Mon Sep 17 00:00:00 2001 From: cvium Date: Wed, 12 Jan 2022 20:10:35 +0100 Subject: Fix bool --- src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs') diff --git a/src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs b/src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs index ee370fb01..4bc537c0e 100644 --- a/src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs +++ b/src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs @@ -26,7 +26,7 @@ public class MatroskaKeyframeExtractor : IKeyframeExtractor /// public bool TryExtractKeyframes(string filePath, [NotNullWhen(true)] out KeyframeData? keyframeData) { - if (filePath.AsSpan().EndsWith(".mkv", StringComparison.OrdinalIgnoreCase)) + if (!filePath.AsSpan().EndsWith(".mkv", StringComparison.OrdinalIgnoreCase)) { keyframeData = null; return false; -- cgit v1.2.3