Forráskód Böngészése

Fix disposed exception when ffmpeg exits early in GetLiveHlsStream

cvium 3 éve
szülő
commit
fdab8eebc9
1 módosított fájl, 6 hozzáadás és 3 törlés
  1. 6 3
      Jellyfin.Api/Controllers/VideoHlsController.cs

+ 6 - 3
Jellyfin.Api/Controllers/VideoHlsController.cs

@@ -267,6 +267,9 @@ namespace Jellyfin.Api.Controllers
 
             // CTS lifecycle is managed internally.
             var cancellationTokenSource = new CancellationTokenSource();
+            // Due to CTS.Token calling ThrowIfDisposed (https://github.com/dotnet/runtime/issues/29970) we have to "cache" the token
+            // since it gets disposed when ffmpeg exits
+            var cancellationToken = cancellationTokenSource.Token;
             using var state = await StreamingHelpers.GetStreamingState(
                     streamingRequest,
                     Request,
@@ -281,7 +284,7 @@ namespace Jellyfin.Api.Controllers
                     _deviceManager,
                     _transcodingJobHelper,
                     TranscodingJobType,
-                    cancellationTokenSource.Token)
+                    cancellationToken)
                 .ConfigureAwait(false);
 
             TranscodingJobDto? job = null;
@@ -290,7 +293,7 @@ namespace Jellyfin.Api.Controllers
             if (!System.IO.File.Exists(playlistPath))
             {
                 var transcodingLock = _transcodingJobHelper.GetTranscodingLock(playlistPath);
-                await transcodingLock.WaitAsync(cancellationTokenSource.Token).ConfigureAwait(false);
+                await transcodingLock.WaitAsync(cancellationToken).ConfigureAwait(false);
                 try
                 {
                     if (!System.IO.File.Exists(playlistPath))
@@ -317,7 +320,7 @@ namespace Jellyfin.Api.Controllers
                         minSegments = state.MinSegments;
                         if (minSegments > 0)
                         {
-                            await HlsHelpers.WaitForMinimumSegmentCount(playlistPath, minSegments, _logger, cancellationTokenSource.Token).ConfigureAwait(false);
+                            await HlsHelpers.WaitForMinimumSegmentCount(playlistPath, minSegments, _logger, cancellationToken).ConfigureAwait(false);
                         }
                     }
                 }