aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2015-04-10 18:16:41 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2015-04-10 18:16:41 -0400
commit17f5ae811817b0d891b2884d7a4adefc18bfaf3f (patch)
tree092aedc05574fa9d706ad51f5ccb6cc170637315
parent3a00f003f52f94ecc74634a6ad395fb38d019a88 (diff)
improve ffmpeg killing
-rw-r--r--MediaBrowser.Api/ApiEntryPoint.cs45
-rw-r--r--MediaBrowser.Api/Playback/BaseStreamingService.cs2
-rw-r--r--MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs9
-rw-r--r--MediaBrowser.Api/Playback/TranscodingThrottler.cs2
-rw-r--r--MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs4
-rw-r--r--MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs4
6 files changed, 35 insertions, 31 deletions
diff --git a/MediaBrowser.Api/ApiEntryPoint.cs b/MediaBrowser.Api/ApiEntryPoint.cs
index ef5191df1..fd7ad2cf5 100644
--- a/MediaBrowser.Api/ApiEntryPoint.cs
+++ b/MediaBrowser.Api/ApiEntryPoint.cs
@@ -284,16 +284,19 @@ namespace MediaBrowser.Api
{
job.ActiveRequestCount++;
- job.DisposeKillTimer();
+ if (string.IsNullOrWhiteSpace(job.PlaySessionId) || job.Type == TranscodingJobType.Progressive)
+ {
+ job.DisposeKillTimer();
+ }
}
public void OnTranscodeEndRequest(TranscodingJob job)
{
job.ActiveRequestCount--;
-
- if (job.ActiveRequestCount == 0)
+ Logger.Debug("OnTranscodeEndRequest job.ActiveRequestCount={0}", job.ActiveRequestCount);
+ if (job.ActiveRequestCount <= 0)
{
- PingTimer(job, true);
+ PingTimer(job, false);
}
}
internal void PingTranscodingJob(string deviceId, string playSessionId)
@@ -323,11 +326,11 @@ namespace MediaBrowser.Api
foreach (var job in jobs)
{
- PingTimer(job, false);
+ PingTimer(job, true);
}
}
- private void PingTimer(TranscodingJob job, bool startTimerIfNeeded)
+ private void PingTimer(TranscodingJob job, bool isProgressCheckIn)
{
// TODO: Lower this hls timeout
var timerDuration = job.Type == TranscodingJobType.Progressive ?
@@ -335,20 +338,23 @@ namespace MediaBrowser.Api
1800000;
// We can really reduce the timeout for apps that are using the newer api
- if (!string.IsNullOrWhiteSpace(job.PlaySessionId) && job.Type == TranscodingJobType.Hls)
+ if (!string.IsNullOrWhiteSpace(job.PlaySessionId) && job.Type != TranscodingJobType.Progressive)
{
- timerDuration = 40000;
+ timerDuration = 35000;
}
if (job.KillTimer == null)
{
- if (startTimerIfNeeded)
+ // Don't start the timer for playback checkins with progressive streaming
+ if (job.Type != TranscodingJobType.Progressive || !isProgressCheckIn)
{
+ Logger.Debug("Starting kill timer at {0}ms", timerDuration);
job.KillTimer = new Timer(OnTranscodeKillTimerStopped, job, timerDuration, Timeout.Infinite);
}
}
else
{
+ Logger.Debug("Changing kill timer to {0}ms", timerDuration);
job.KillTimer.Change(timerDuration, Timeout.Infinite);
}
}
@@ -439,28 +445,19 @@ namespace MediaBrowser.Api
lock (job.ProcessLock)
{
- var process = job.Process;
-
- var hasExited = true;
-
- try
- {
- hasExited = process.HasExited;
- }
- catch (Exception ex)
+ if (job.TranscodingThrottler != null)
{
- Logger.ErrorException("Error determining if ffmpeg process has exited for {0}", ex, job.Path);
+ job.TranscodingThrottler.Stop();
}
+ var process = job.Process;
+
+ var hasExited = job.HasExited;
+
if (!hasExited)
{
try
{
- if (job.TranscodingThrottler != null)
- {
- job.TranscodingThrottler.Stop();
- }
-
Logger.Info("Killing ffmpeg process for {0}", job.Path);
//process.Kill();
diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index 728fea0e0..24ee17943 100644
--- a/MediaBrowser.Api/Playback/BaseStreamingService.cs
+++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs
@@ -1706,7 +1706,7 @@ namespace MediaBrowser.Api.Playback
state.OutputAudioCodec = "copy";
}
- if (string.Equals(state.OutputVideoCodec, "copy", StringComparison.OrdinalIgnoreCase))
+ if (string.Equals(state.OutputVideoCodec, "copy", StringComparison.OrdinalIgnoreCase) && TranscodingJobType == TranscodingJobType.Hls)
{
var segmentLength = GetSegmentLength(state);
if (segmentLength.HasValue)
diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
index 98d6c9a76..455113da9 100644
--- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
@@ -144,7 +144,6 @@ namespace MediaBrowser.Api.Playback.Hls
request.StartTimeTicks = GetSeekPositionTicks(state, requestedIndex);
job = await StartFfMpeg(state, playlistPath, cancellationTokenSource).ConfigureAwait(false);
- ApiEntryPoint.Instance.OnTranscodeBeginRequest(job);
}
catch
{
@@ -154,6 +153,14 @@ namespace MediaBrowser.Api.Playback.Hls
await WaitForMinimumSegmentCount(playlistPath, 1, cancellationTokenSource.Token).ConfigureAwait(false);
}
+ else
+ {
+ job = ApiEntryPoint.Instance.OnTranscodeBeginRequest(playlistPath, TranscodingJobType);
+ if (job.TranscodingThrottler != null)
+ {
+ job.TranscodingThrottler.UnpauseTranscoding();
+ }
+ }
}
}
finally
diff --git a/MediaBrowser.Api/Playback/TranscodingThrottler.cs b/MediaBrowser.Api/Playback/TranscodingThrottler.cs
index 58cfa086e..ece455009 100644
--- a/MediaBrowser.Api/Playback/TranscodingThrottler.cs
+++ b/MediaBrowser.Api/Playback/TranscodingThrottler.cs
@@ -70,7 +70,7 @@ namespace MediaBrowser.Api.Playback
}
}
- private void UnpauseTranscoding()
+ public void UnpauseTranscoding()
{
if (_isPaused)
{
diff --git a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
index 7c4160e1b..c309739d0 100644
--- a/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
+++ b/MediaBrowser.MediaEncoding/Encoder/MediaEncoder.cs
@@ -244,8 +244,8 @@ namespace MediaBrowser.MediaEncoding.Encoder
{
try
{
- stream.KeyFrames = await GetKeyFrames(inputPath, stream.Index, cancellationToken)
- .ConfigureAwait(false);
+ //stream.KeyFrames = await GetKeyFrames(inputPath, stream.Index, cancellationToken)
+ // .ConfigureAwait(false);
}
catch (OperationCanceledException)
{
diff --git a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
index 7950a8d5c..f4d8ddb1a 100644
--- a/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
+++ b/MediaBrowser.Providers/MediaInfo/FFProbeVideoInfo.cs
@@ -130,7 +130,7 @@ namespace MediaBrowser.Providers.MediaInfo
return ItemUpdateType.MetadataImport;
}
- private const string SchemaVersion = "3";
+ private const string SchemaVersion = "4";
private async Task<Model.MediaInfo.MediaInfo> GetMediaInfo(Video item,
IIsoMount isoMount,
@@ -145,7 +145,7 @@ namespace MediaBrowser.Providers.MediaInfo
try
{
- //return _json.DeserializeFromFile<Model.MediaInfo.MediaInfo>(cachePath);
+ return _json.DeserializeFromFile<Model.MediaInfo.MediaInfo>(cachePath);
}
catch (FileNotFoundException)
{