Don't start waiting for a segment which doesn't exist if transcoding is not running
This commit is contained in:
parent
7aea9266d0
commit
3740228100
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user