diff options
| author | cvium <clausvium@gmail.com> | 2021-09-26 21:07:30 +0200 |
|---|---|---|
| committer | cvium <clausvium@gmail.com> | 2021-09-26 21:07:30 +0200 |
| commit | 2899b77cd58456470b8dd4d01d3a8c525a9b5911 (patch) | |
| tree | decd61105f437fb0c0efc75b02d433b1aca29407 /src/Jellyfin.MediaEncoding.Hls | |
| parent | 41383e6fe4d2ae80552c1b3df0b469f5416f2d89 (diff) | |
Implement FfProbeKeyframeExtractor and add tests for it
Diffstat (limited to 'src/Jellyfin.MediaEncoding.Hls')
| -rw-r--r-- | src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs b/src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs index 5411d5667..cbc62eb59 100644 --- a/src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs +++ b/src/Jellyfin.MediaEncoding.Hls/Playlist/DynamicHlsPlaylistGenerator.cs @@ -90,9 +90,11 @@ namespace Jellyfin.MediaEncoding.Hls.Playlist .AppendLine(); } - double currentRuntimeInSeconds = 0; + long currentRuntimeInSeconds = 0; foreach (var length in segments) { + // Manually convert to ticks to avoid precision loss when converting double + var lengthTicks = Convert.ToInt64(length * TimeSpan.TicksPerSecond); builder.Append("#EXTINF:") .Append(length.ToString("0.000000", CultureInfo.InvariantCulture)) .AppendLine(", nodesc") @@ -101,12 +103,12 @@ namespace Jellyfin.MediaEncoding.Hls.Playlist .Append(segmentExtension) .Append(request.QueryString) .Append("&runtimeTicks=") - .Append(TimeSpan.FromSeconds(currentRuntimeInSeconds).Ticks) + .Append(currentRuntimeInSeconds) .Append("&actualSegmentLengthTicks=") - .Append(TimeSpan.FromSeconds(length).Ticks) + .Append(lengthTicks) .AppendLine(); - currentRuntimeInSeconds += length; + currentRuntimeInSeconds += lengthTicks; } builder.AppendLine("#EXT-X-ENDLIST"); @@ -122,6 +124,7 @@ namespace Jellyfin.MediaEncoding.Hls.Playlist return false; } + var succeeded = false; var cachePath = GetCachePath(filePath); if (TryReadFromCache(cachePath, out var cachedResult)) { @@ -139,10 +142,14 @@ namespace Jellyfin.MediaEncoding.Hls.Playlist return false; } - CacheResult(cachePath, keyframeData); + succeeded = keyframeData.KeyframeTicks.Count > 0; + if (succeeded) + { + CacheResult(cachePath, keyframeData); + } } - return keyframeData.KeyframeTicks.Count > 0; + return succeeded; } private void CacheResult(string cachePath, KeyframeData keyframeData) |
