aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasily <just.one.man@yandex.ru>2019-10-08 17:00:16 +0300
committerVasily <just.one.man@yandex.ru>2019-10-14 13:22:52 +0300
commit3740228100b15c9feae1864f5652674af69e582c (patch)
treee5285a9d9c6c66aa4d7da772b57e40e3082d771a
parent7aea9266d05ddd0673c390e102833c154b3ff9f6 (diff)
Don't start waiting for a segment which doesn't exist if transcoding is not running
-rw-r--r--MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs48
1 files changed, 28 insertions, 20 deletions
diff --git a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
index a06a2f84d..43cf92427 100644
--- a/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
+++ b/MediaBrowser.Api/Playback/Hls/DynamicHlsService.cs
@@ -482,38 +482,46 @@ namespace MediaBrowser.Api.Playback.Hls
}
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
- // either the transcoding job should be done or next segment should also exist
- if (segmentExists)
+ while (!cancellationToken.IsCancellationRequested && !transcodingJob.HasExited)
{
- 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);
- return await GetSegmentResult(state, segmentPath, segmentIndex, transcodingJob).ConfigureAwait(false);
+ if (transcodingJob.HasExited || File.Exists(nextSegmentPath))
+ {
+ 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)
+ else
{
- continue; // avoid unnecessary waiting if segment just became available
+ segmentExists = File.Exists(segmentPath);
+ if (segmentExists)
+ {
+ continue; // avoid unnecessary waiting if segment just became available
+ }
}
+ await Task.Delay(100, cancellationToken).ConfigureAwait(false);
}
- 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);
+ cancellationToken.ThrowIfCancellationRequested();
+ if (!File.Exists(segmentPath))
+ {
+ Logger.LogWarning("cannot serve {0} as transcoding quit before we got there", segmentPath);
+ }
+ else
+ {
+ Logger.LogDebug("serving {0} as it's on disk and transcoding stopped", segmentPath);
+ }
}
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);
}