diff options
| author | cvium <clausvium@gmail.com> | 2021-09-25 10:41:36 +0200 |
|---|---|---|
| committer | cvium <clausvium@gmail.com> | 2021-09-25 10:41:36 +0200 |
| commit | be233b49b610fafb63572dc9dc5325bf27cd72ac (patch) | |
| tree | 8518c13aee7994d332e83e19e432a03ffcecc7de /src/Jellyfin.MediaEncoding.Hls/Playlist | |
| parent | 35c0801d6cd1def0f8c50b7e892e04b56d7abbb1 (diff) | |
Fixes
Diffstat (limited to 'src/Jellyfin.MediaEncoding.Hls/Playlist')
| -rw-r--r-- | src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs b/src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs index 0395d7ea46..13204c7578 100644 --- a/src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs +++ b/src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs @@ -26,6 +26,7 @@ namespace Jellyfin.MediaEncoding.Hls.Playlist private readonly IMediaEncoder _mediaEncoder; private readonly IApplicationPaths _applicationPaths; private readonly KeyframeExtractor _keyframeExtractor; + private readonly ILogger<DynamicHlsPlaylistGenerator> _logger; /// <summary> /// Initializes a new instance of the <see cref="DynamicHlsPlaylistGenerator"/> class. @@ -40,6 +41,7 @@ namespace Jellyfin.MediaEncoding.Hls.Playlist _mediaEncoder = mediaEncoder; _applicationPaths = applicationPaths; _keyframeExtractor = new KeyframeExtractor(loggerFactory.CreateLogger<KeyframeExtractor>()); + _logger = loggerFactory.CreateLogger<DynamicHlsPlaylistGenerator>(); } private string KeyframeCachePath => Path.Combine(_applicationPaths.DataPath, "keyframes"); @@ -47,12 +49,13 @@ namespace Jellyfin.MediaEncoding.Hls.Playlist /// <inheritdoc /> public string CreateMainPlaylist(CreateMainPlaylistRequest request) { - IReadOnlyList<double> segments; - if (IsExtractionAllowed(request.FilePath)) + IReadOnlyList<double> segments = Array.Empty<double>(); + if (IsExtractionAllowedForFile(request.FilePath)) { segments = ComputeSegments(request.FilePath, request.DesiredSegmentLengthMs); } - else + + if (segments.Count == 0) { segments = ComputeEqualLengthSegments(request.DesiredSegmentLengthMs, request.TotalRuntimeTicks); } @@ -92,7 +95,7 @@ namespace Jellyfin.MediaEncoding.Hls.Playlist foreach (var length in segments) { builder.Append("#EXTINF:") - .Append(length.ToString("0.0000", CultureInfo.InvariantCulture)) + .Append(length.ToString("0.000000", CultureInfo.InvariantCulture)) .AppendLine(", nodesc") .Append(request.EndpointPrefix) .Append(index++) @@ -122,7 +125,16 @@ namespace Jellyfin.MediaEncoding.Hls.Playlist } else { - keyframeData = _keyframeExtractor.GetKeyframeData(filePath, _mediaEncoder.ProbePath, string.Empty); + try + { + keyframeData = _keyframeExtractor.GetKeyframeData(filePath, _mediaEncoder.ProbePath, string.Empty); + } + catch (Exception ex) + { + _logger.LogError(ex, "Keyframe extraction failed for path {FilePath}", filePath); + return Array.Empty<double>(); + } + CacheResult(cachePath, keyframeData); } @@ -176,7 +188,7 @@ namespace Jellyfin.MediaEncoding.Hls.Playlist return false; } - private bool IsExtractionAllowed(ReadOnlySpan<char> filePath) + private bool IsExtractionAllowedForFile(ReadOnlySpan<char> filePath) { // Remove the leading dot var extension = Path.GetExtension(filePath)[1..]; |
