diff options
| author | Vasily <just.one.man@yandex.ru> | 2019-10-08 17:00:16 +0300 |
|---|---|---|
| committer | Vasily <just.one.man@yandex.ru> | 2019-10-14 13:22:52 +0300 |
| commit | 3740228100b15c9feae1864f5652674af69e582c (patch) | |
| tree | e5285a9d9c6c66aa4d7da772b57e40e3082d771a | |
| parent | 7aea9266d05ddd0673c390e102833c154b3ff9f6 (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.cs | 48 |
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); } |
