aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Playback/TranscodingThrottler.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-02-28 13:47:05 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-02-28 13:47:05 -0500
commit3d22c486700f63034f6735bc6cf3efb2ad18af22 (patch)
tree9e4c9c4641cffffc018ff3d1ccc47f5714e04fc0 /MediaBrowser.Api/Playback/TranscodingThrottler.cs
parent291727f624b0ec4f0476d26f915a93c3410104c7 (diff)
added IProcessManager
Diffstat (limited to 'MediaBrowser.Api/Playback/TranscodingThrottler.cs')
-rw-r--r--MediaBrowser.Api/Playback/TranscodingThrottler.cs53
1 files changed, 42 insertions, 11 deletions
diff --git a/MediaBrowser.Api/Playback/TranscodingThrottler.cs b/MediaBrowser.Api/Playback/TranscodingThrottler.cs
index 50c213655..432f4667d 100644
--- a/MediaBrowser.Api/Playback/TranscodingThrottler.cs
+++ b/MediaBrowser.Api/Playback/TranscodingThrottler.cs
@@ -1,4 +1,5 @@
-using MediaBrowser.Model.Logging;
+using MediaBrowser.Controller.Diagnostics;
+using MediaBrowser.Model.Logging;
using System;
using System.IO;
using System.Threading;
@@ -9,11 +10,16 @@ namespace MediaBrowser.Api.Playback
{
private readonly TranscodingJob _job;
private readonly ILogger _logger;
+ private readonly IProcessManager _processManager;
private Timer _timer;
+ private bool _isPaused;
public void Start()
{
- _timer = new Timer(TimerCallback, null, 5000, 5000);
+ if (_processManager.SupportsSuspension)
+ {
+ _timer = new Timer(TimerCallback, null, 5000, 5000);
+ }
}
private void TimerCallback(object state)
@@ -36,22 +42,49 @@ namespace MediaBrowser.Api.Playback
private void PauseTranscoding()
{
- _logger.Debug("Sending pause command to ffmpeg");
- _job.Process.StandardInput.WriteLine("p");
+ if (!_isPaused)
+ {
+ _logger.Debug("Sending pause command to ffmpeg");
+ }
+
+ try
+ {
+ //_job.Process.StandardInput.WriteLine("p");
+ _processManager.SuspendProcess(_job.Process);
+ _isPaused = true;
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error pausing transcoding", ex);
+ }
}
private void UnpauseTranscoding()
{
- _logger.Debug("Sending unpause command to ffmpeg");
- _job.Process.StandardInput.WriteLine("u");
+ if (_isPaused)
+ {
+ _logger.Debug("Sending unpause command to ffmpeg");
+ }
+
+ try
+ {
+ //_job.Process.StandardInput.WriteLine("u");
+ _processManager.ResumeProcess(_job.Process);
+ _isPaused = false;
+ }
+ catch (Exception ex)
+ {
+ _logger.ErrorException("Error unpausing transcoding", ex);
+ }
}
private readonly long _gapLengthInTicks = TimeSpan.FromMinutes(2).Ticks;
- public TranscodingThrottler(TranscodingJob job, ILogger logger)
+ public TranscodingThrottler(TranscodingJob job, ILogger logger, IProcessManager processManager)
{
_job = job;
_logger = logger;
+ _processManager = processManager;
}
private bool IsThrottleAllowed(TranscodingJob job)
@@ -106,13 +139,11 @@ namespace MediaBrowser.Api.Playback
catch
{
//_logger.Error("Error getting output size");
+ return false;
}
}
- else
- {
- //_logger.Debug("No throttle data for " + path);
- }
+ //_logger.Debug("No throttle data for " + path);
return false;
}