aboutsummaryrefslogtreecommitdiff
path: root/src/Jellyfin.MediaEncoding.Hls/Playlist
diff options
context:
space:
mode:
authorcvium <clausvium@gmail.com>2021-09-25 10:41:36 +0200
committercvium <clausvium@gmail.com>2021-09-25 10:41:36 +0200
commitbe233b49b610fafb63572dc9dc5325bf27cd72ac (patch)
tree8518c13aee7994d332e83e19e432a03ffcecc7de /src/Jellyfin.MediaEncoding.Hls/Playlist
parent35c0801d6cd1def0f8c50b7e892e04b56d7abbb1 (diff)
Fixes
Diffstat (limited to 'src/Jellyfin.MediaEncoding.Hls/Playlist')
-rw-r--r--src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs24
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..];