improve ffmpeg killing
This commit is contained in:
parent
3a00f003f5
commit
17f5ae8118
|
@ -284,16 +284,19 @@ namespace MediaBrowser.Api
|
|||
{
|
||||
job.ActiveRequestCount++;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -438,29 +444,20 @@ namespace MediaBrowser.Api
|
|||
}
|
||||
|
||||
lock (job.ProcessLock)
|
||||
{
|
||||
var process = job.Process;
|
||||
|
||||
var hasExited = true;
|
||||
|
||||
try
|
||||
{
|
||||
hasExited = process.HasExited;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.ErrorException("Error determining if ffmpeg process has exited for {0}", ex, job.Path);
|
||||
}
|
||||
|
||||
if (!hasExited)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (job.TranscodingThrottler != null)
|
||||
{
|
||||
job.TranscodingThrottler.Stop();
|
||||
}
|
||||
|
||||
var process = job.Process;
|
||||
|
||||
var hasExited = job.HasExited;
|
||||
|
||||
if (!hasExited)
|
||||
{
|
||||
try
|
||||
{
|
||||
Logger.Info("Killing ffmpeg process for {0}", job.Path);
|
||||
|
||||
//process.Kill();
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -70,7 +70,7 @@ namespace MediaBrowser.Api.Playback
|
|||
}
|
||||
}
|
||||
|
||||
private void UnpauseTranscoding()
|
||||
public void UnpauseTranscoding()
|
||||
{
|
||||
if (_isPaused)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue
Block a user