Don't start waiting for a segment which doesn't exist if transcoding is not running

This commit is contained in:
Vasily 2019-10-08 17:00:16 +03:00
parent 7aea9266d0
commit 3740228100

View File

@ -482,38 +482,46 @@ namespace MediaBrowser.Api.Playback.Hls
} }
var nextSegmentPath = GetSegmentPath(state, playlistPath, segmentIndex + 1); var nextSegmentPath = GetSegmentPath(state, playlistPath, segmentIndex + 1);
while (!cancellationToken.IsCancellationRequested && transcodingJob != null && !transcodingJob.HasExited) if (transcodingJob != null)
{ {
// To be considered ready, the segment file has to exist AND while (!cancellationToken.IsCancellationRequested && !transcodingJob.HasExited)
// either the transcoding job should be done or next segment should also exist
if (segmentExists)
{ {
if (transcodingJob.HasExited || File.Exists(nextSegmentPath)) // To be considered ready, the segment file has to exist AND
// either the transcoding job should be done or next segment should also exist
if (segmentExists)
{ {
Logger.LogDebug("serving up {0} as it deemed ready", segmentPath); if (transcodingJob.HasExited || File.Exists(nextSegmentPath))
return await GetSegmentResult(state, segmentPath, segmentIndex, transcodingJob).ConfigureAwait(false); {
Logger.LogDebug("serving up {0} as it deemed ready", segmentPath);
return await GetSegmentResult(state, segmentPath, segmentIndex, transcodingJob).ConfigureAwait(false);
}
} }
else
{
segmentExists = File.Exists(segmentPath);
if (segmentExists)
{
continue; // avoid unnecessary waiting if segment just became available
}
}
await Task.Delay(100, cancellationToken).ConfigureAwait(false);
}
cancellationToken.ThrowIfCancellationRequested();
if (!File.Exists(segmentPath))
{
Logger.LogWarning("cannot serve {0} as transcoding quit before we got there", segmentPath);
} }
else else
{ {
segmentExists = File.Exists(segmentPath); Logger.LogDebug("serving {0} as it's on disk and transcoding stopped", segmentPath);
if (segmentExists)
{
continue; // avoid unnecessary waiting if segment just became available
}
} }
await Task.Delay(100, cancellationToken).ConfigureAwait(false);
}
cancellationToken.ThrowIfCancellationRequested();
if (!File.Exists(segmentPath))
{
Logger.LogWarning("cannot serve {0} as transcoding quit before we got there", segmentPath);
} }
else else
{ {
Logger.LogDebug("serving {0} as it's on disk and transcoding stopped", segmentPath); Logger.LogWarning("cannot serve {0} as it doesn't exist and no transcode is running", segmentPath);
} }
return await GetSegmentResult(state, segmentPath, segmentIndex, transcodingJob).ConfigureAwait(false); return await GetSegmentResult(state, segmentPath, segmentIndex, transcodingJob).ConfigureAwait(false);
} }