< Summary - Jellyfin

Information
Class: Jellyfin.MediaEncoding.Hls.Extractors.MatroskaKeyframeExtractor
Assembly: Jellyfin.MediaEncoding.Hls
File(s): /srv/git/jellyfin/src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs
Line coverage
21%
Covered lines: 4
Uncovered lines: 15
Coverable lines: 19
Total lines: 48
Line coverage: 21%
Branch coverage
0%
Covered branches: 0
Total branches: 2
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Coverage history

Coverage history 0 25 50 75 100

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_IsMetadataBased()100%11100%
TryExtractKeyframes(...)0%620%

File(s)

/srv/git/jellyfin/src/Jellyfin.MediaEncoding.Hls/Extractors/MatroskaKeyframeExtractor.cs

#LineLine coverage
 1using System;
 2using System.Diagnostics.CodeAnalysis;
 3using Jellyfin.MediaEncoding.Keyframes;
 4using Microsoft.Extensions.Logging;
 5using Extractor = Jellyfin.MediaEncoding.Keyframes.Matroska.MatroskaKeyframeExtractor;
 6
 7namespace Jellyfin.MediaEncoding.Hls.Extractors;
 8
 9/// <inheritdoc />
 10public class MatroskaKeyframeExtractor : IKeyframeExtractor
 11{
 12    private readonly ILogger<MatroskaKeyframeExtractor> _logger;
 13
 14    /// <summary>
 15    /// Initializes a new instance of the <see cref="MatroskaKeyframeExtractor"/> class.
 16    /// </summary>
 17    /// <param name="logger">An instance of the <see cref="ILogger{MatroskaKeyframeExtractor}"/> interface.</param>
 18    public MatroskaKeyframeExtractor(ILogger<MatroskaKeyframeExtractor> logger)
 2219    {
 2220        _logger = logger;
 2221    }
 22
 23    /// <inheritdoc />
 2224    public bool IsMetadataBased => true;
 25
 26    /// <inheritdoc />
 27    public bool TryExtractKeyframes(string filePath, [NotNullWhen(true)] out KeyframeData? keyframeData)
 028    {
 029        if (!filePath.AsSpan().EndsWith(".mkv", StringComparison.OrdinalIgnoreCase))
 030        {
 031            keyframeData = null;
 032            return false;
 33        }
 34
 35        try
 036        {
 037            keyframeData = Extractor.GetKeyframeData(filePath);
 038            return keyframeData.KeyframeTicks.Count > 0;
 39        }
 040        catch (Exception ex)
 041        {
 042            _logger.LogError(ex, "Extracting keyframes from {FilePath} using matroska metadata failed", filePath);
 043        }
 44
 045        keyframeData = null;
 046        return false;
 047    }
 48}