|
|
|
@ -67,31 +67,38 @@ public class HlsSessionWorker : IHlsSessionWorker |
|
|
|
DateTimeOffset filterBefore, |
|
|
|
DateTimeOffset filterBefore, |
|
|
|
CancellationToken cancellationToken) |
|
|
|
CancellationToken cancellationToken) |
|
|
|
{ |
|
|
|
{ |
|
|
|
var sw = Stopwatch.StartNew(); |
|
|
|
|
|
|
|
await Slim.WaitAsync(cancellationToken); |
|
|
|
|
|
|
|
try |
|
|
|
try |
|
|
|
{ |
|
|
|
{ |
|
|
|
Option<string[]> maybeLines = await ReadPlaylistLines(cancellationToken); |
|
|
|
var sw = Stopwatch.StartNew(); |
|
|
|
foreach (string[] input in maybeLines) |
|
|
|
await Slim.WaitAsync(cancellationToken); |
|
|
|
|
|
|
|
try |
|
|
|
{ |
|
|
|
{ |
|
|
|
TrimPlaylistResult trimResult = _hlsPlaylistFilter.TrimPlaylist(PlaylistStart, filterBefore, input); |
|
|
|
Option<string[]> maybeLines = await ReadPlaylistLines(cancellationToken); |
|
|
|
if (DateTimeOffset.Now > _lastDelete.AddSeconds(30)) |
|
|
|
foreach (string[] input in maybeLines) |
|
|
|
{ |
|
|
|
{ |
|
|
|
DeleteOldSegments(trimResult); |
|
|
|
TrimPlaylistResult trimResult = _hlsPlaylistFilter.TrimPlaylist(PlaylistStart, filterBefore, input); |
|
|
|
_lastDelete = DateTimeOffset.Now; |
|
|
|
if (DateTimeOffset.Now > _lastDelete.AddSeconds(30)) |
|
|
|
} |
|
|
|
{ |
|
|
|
|
|
|
|
DeleteOldSegments(trimResult); |
|
|
|
|
|
|
|
_lastDelete = DateTimeOffset.Now; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return trimResult; |
|
|
|
return trimResult; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
finally |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
Slim.Release(); |
|
|
|
|
|
|
|
sw.Stop(); |
|
|
|
|
|
|
|
// _logger.LogDebug("TrimPlaylist took {Duration}", sw.Elapsed);
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return None; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
finally |
|
|
|
catch (Exception ex) when (ex is TaskCanceledException or OperationCanceledException) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Slim.Release(); |
|
|
|
// do nothing
|
|
|
|
sw.Stop(); |
|
|
|
|
|
|
|
// _logger.LogDebug("TrimPlaylist took {Duration}", sw.Elapsed);
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return None; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void PlayoutUpdated() |
|
|
|
public void PlayoutUpdated() |
|
|
|
|