aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/ApiEntryPoint.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/ApiEntryPoint.cs')
-rw-r--r--MediaBrowser.Api/ApiEntryPoint.cs58
1 files changed, 48 insertions, 10 deletions
diff --git a/MediaBrowser.Api/ApiEntryPoint.cs b/MediaBrowser.Api/ApiEntryPoint.cs
index 08ac5671d..ed5fa5bfd 100644
--- a/MediaBrowser.Api/ApiEntryPoint.cs
+++ b/MediaBrowser.Api/ApiEntryPoint.cs
@@ -286,27 +286,65 @@ namespace MediaBrowser.Api
job.DisposeKillTimer();
}
-
+
public void OnTranscodeEndRequest(TranscodingJob job)
{
job.ActiveRequestCount--;
if (job.ActiveRequestCount == 0)
{
- // TODO: Lower this hls timeout
- var timerDuration = job.Type == TranscodingJobType.Progressive ?
- 1000 :
- 7200000;
+ PingTimer(job, true);
+ }
+ }
+ internal void PingTranscodingJob(string deviceId, string playSessionId)
+ {
+ if (string.IsNullOrEmpty(deviceId))
+ {
+ throw new ArgumentNullException("deviceId");
+ }
- if (job.KillTimer == null)
+ var jobs = new List<TranscodingJob>();
+
+ lock (_activeTranscodingJobs)
+ {
+ // This is really only needed for HLS.
+ // Progressive streams can stop on their own reliably
+ jobs = jobs.Where(j =>
{
- job.KillTimer = new Timer(OnTranscodeKillTimerStopped, job, timerDuration, Timeout.Infinite);
- }
- else
+ if (string.Equals(deviceId, j.DeviceId, StringComparison.OrdinalIgnoreCase))
+ {
+ return string.Equals(playSessionId, j.PlaySessionId, StringComparison.OrdinalIgnoreCase);
+ }
+
+ return false;
+
+ }).ToList();
+ }
+
+ foreach (var job in jobs)
+ {
+ PingTimer(job, false);
+ }
+ }
+
+ private void PingTimer(TranscodingJob job, bool startTimerIfNeeded)
+ {
+ // TODO: Lower this hls timeout
+ var timerDuration = job.Type == TranscodingJobType.Progressive ?
+ 1000 :
+ 1800000;
+
+ if (job.KillTimer == null)
+ {
+ if (startTimerIfNeeded)
{
- job.KillTimer.Change(timerDuration, Timeout.Infinite);
+ job.KillTimer = new Timer(OnTranscodeKillTimerStopped, job, timerDuration, Timeout.Infinite);
}
}
+ else
+ {
+ job.KillTimer.Change(timerDuration, Timeout.Infinite);
+ }
}
/// <summary>