|
@@ -53,7 +53,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|
|
private readonly int DefaultImageExtractionTimeoutMs;
|
|
|
private readonly string StartupOptionFFmpegPath;
|
|
|
|
|
|
- private readonly SemaphoreSlim _thumbnailResourcePool = new SemaphoreSlim(1, 1);
|
|
|
+ private readonly SemaphoreSlim _thumbnailResourcePool = new SemaphoreSlim(2, 2);
|
|
|
private readonly List<ProcessWrapper> _runningProcesses = new List<ProcessWrapper>();
|
|
|
private readonly ILocalizationManager _localization;
|
|
|
|
|
@@ -582,19 +582,27 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|
|
{
|
|
|
bool ranToCompletion;
|
|
|
|
|
|
- StartProcess(processWrapper);
|
|
|
-
|
|
|
- var timeoutMs = ConfigurationManager.Configuration.ImageExtractionTimeoutMs;
|
|
|
- if (timeoutMs <= 0)
|
|
|
+ await _thumbnailResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
|
|
|
+ try
|
|
|
{
|
|
|
- timeoutMs = DefaultImageExtractionTimeoutMs;
|
|
|
- }
|
|
|
+ StartProcess(processWrapper);
|
|
|
+
|
|
|
+ var timeoutMs = ConfigurationManager.Configuration.ImageExtractionTimeoutMs;
|
|
|
+ if (timeoutMs <= 0)
|
|
|
+ {
|
|
|
+ timeoutMs = DefaultImageExtractionTimeoutMs;
|
|
|
+ }
|
|
|
|
|
|
- ranToCompletion = await process.WaitForExitAsync(timeoutMs).ConfigureAwait(false);
|
|
|
+ ranToCompletion = await process.WaitForExitAsync(timeoutMs).ConfigureAwait(false);
|
|
|
|
|
|
- if (!ranToCompletion)
|
|
|
+ if (!ranToCompletion)
|
|
|
+ {
|
|
|
+ StopProcess(processWrapper, 1000);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finally
|
|
|
{
|
|
|
- StopProcess(processWrapper, 1000);
|
|
|
+ _thumbnailResourcePool.Release();
|
|
|
}
|
|
|
|
|
|
var exitCode = ranToCompletion ? processWrapper.ExitCode ?? 0 : -1;
|
|
@@ -625,7 +633,8 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|
|
return time.ToString(@"hh\:mm\:ss\.fff", UsCulture);
|
|
|
}
|
|
|
|
|
|
- public async Task ExtractVideoImagesOnInterval(string[] inputFiles,
|
|
|
+ public async Task ExtractVideoImagesOnInterval(
|
|
|
+ string[] inputFiles,
|
|
|
string container,
|
|
|
MediaStream videoStream,
|
|
|
MediaProtocol protocol,
|
|
@@ -636,8 +645,6 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|
|
int? maxWidth,
|
|
|
CancellationToken cancellationToken)
|
|
|
{
|
|
|
- var resourcePool = _thumbnailResourcePool;
|
|
|
-
|
|
|
var inputArgument = GetInputArgument(inputFiles, protocol);
|
|
|
|
|
|
var vf = "fps=fps=1/" + interval.TotalSeconds.ToString(UsCulture);
|
|
@@ -701,7 +708,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|
|
|
|
|
_logger.LogInformation(process.StartInfo.FileName + " " + process.StartInfo.Arguments);
|
|
|
|
|
|
- await resourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
|
|
|
+ await _thumbnailResourcePool.WaitAsync(cancellationToken).ConfigureAwait(false);
|
|
|
|
|
|
bool ranToCompletion = false;
|
|
|
|
|
@@ -742,7 +749,7 @@ namespace MediaBrowser.MediaEncoding.Encoder
|
|
|
}
|
|
|
finally
|
|
|
{
|
|
|
- resourcePool.Release();
|
|
|
+ _thumbnailResourcePool.Release();
|
|
|
}
|
|
|
|
|
|
var exitCode = ranToCompletion ? processWrapper.ExitCode ?? 0 : -1;
|