< Summary - Jellyfin

Information
Class: Jellyfin.MediaEncoding.Hls.Extractors.FfProbeKeyframeExtractor
Assembly: Jellyfin.MediaEncoding.Hls
File(s): /srv/git/jellyfin/src/Jellyfin.MediaEncoding.Hls/Extractors/FfProbeKeyframeExtractor.cs
Line coverage
28%
Covered lines: 6
Uncovered lines: 15
Coverable lines: 21
Total lines: 58
Line coverage: 28.5%
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/FfProbeKeyframeExtractor.cs

#LineLine coverage
 1using System;
 2using System.Diagnostics.CodeAnalysis;
 3using System.IO;
 4using Emby.Naming.Common;
 5using Jellyfin.Extensions;
 6using Jellyfin.MediaEncoding.Keyframes;
 7using MediaBrowser.Controller.MediaEncoding;
 8using Microsoft.Extensions.Logging;
 9using Extractor = Jellyfin.MediaEncoding.Keyframes.FfProbe.FfProbeKeyframeExtractor;
 10
 11namespace Jellyfin.MediaEncoding.Hls.Extractors;
 12
 13/// <inheritdoc />
 14public class FfProbeKeyframeExtractor : IKeyframeExtractor
 15{
 16    private readonly IMediaEncoder _mediaEncoder;
 17    private readonly NamingOptions _namingOptions;
 18    private readonly ILogger<FfProbeKeyframeExtractor> _logger;
 19
 20    /// <summary>
 21    /// Initializes a new instance of the <see cref="FfProbeKeyframeExtractor"/> class.
 22    /// </summary>
 23    /// <param name="mediaEncoder">An instance of the <see cref="IMediaEncoder"/> interface.</param>
 24    /// <param name="namingOptions">An instance of <see cref="NamingOptions"/>.</param>
 25    /// <param name="logger">An instance of the <see cref="ILogger{FfprobeKeyframeExtractor}"/> interface.</param>
 26    public FfProbeKeyframeExtractor(IMediaEncoder mediaEncoder, NamingOptions namingOptions, ILogger<FfProbeKeyframeExtr
 2227    {
 2228        _mediaEncoder = mediaEncoder;
 2229        _namingOptions = namingOptions;
 2230        _logger = logger;
 2231    }
 32
 33    /// <inheritdoc />
 2234    public bool IsMetadataBased => false;
 35
 36    /// <inheritdoc />
 37    public bool TryExtractKeyframes(string filePath, [NotNullWhen(true)] out KeyframeData? keyframeData)
 038    {
 039        if (!_namingOptions.VideoFileExtensions.Contains(Path.GetExtension(filePath.AsSpan()), StringComparison.OrdinalI
 040        {
 041            keyframeData = null;
 042            return false;
 43        }
 44
 45        try
 046        {
 047            keyframeData = Extractor.GetKeyframeData(_mediaEncoder.ProbePath, filePath);
 048            return keyframeData.KeyframeTicks.Count > 0;
 49        }
 050        catch (Exception ex)
 051        {
 052            _logger.LogError(ex, "Extracting keyframes from {FilePath} using ffprobe failed", filePath);
 053        }
 54
 055        keyframeData = null;
 056        return false;
 057    }
 58}