@ -1,4 +1,5 @@
@@ -1,4 +1,5 @@
using ErsatzTV.Core ;
using System.Diagnostics ;
using ErsatzTV.Core ;
using ErsatzTV.Core.Domain ;
using ErsatzTV.Core.Errors ;
using ErsatzTV.Core.FFmpeg ;
@ -78,26 +79,48 @@ public class StartFFmpegSessionHandler : IRequestHandler<StartFFmpegSession, Eit
@@ -78,26 +79,48 @@ public class StartFFmpegSessionHandler : IRequestHandler<StartFFmpegSession, Eit
IHlsSessionWorker worker ,
CancellationToken cancellationToken )
{
DateTimeOffset start = DateTimeOffset . Now ;
DateTimeOffset finish = start . AddSeconds ( 8 ) ;
while ( ! File . Exists ( playlistFileName ) )
var sw = Stopwatch . StartNew ( ) ;
try
{
await Task . Delay ( TimeSpan . FromMilliseconds ( 1 0 0 ) , cancellationToken ) ;
}
DateTimeOffset start = DateTimeOffset . Now ;
DateTimeOffset finish = start . AddSeconds ( 8 ) ;
var segmentCount = 0 ;
while ( DateTimeOffset . Now < finish & & segmentCount < initialSegmentCount )
{
await Task . Delay ( TimeSpan . FromMilliseconds ( 2 0 0 ) , cancellationToken ) ;
_l ogger . LogDebug ( "Waiting for playlist to exist" ) ;
while ( ! File . Exists ( playlistFileName ) )
{
await Task . Delay ( TimeSpan . FromMilliseconds ( 1 0 0 ) , cancellationToken ) ;
}
DateTimeOffset now = DateTimeOffset . Now . AddSeconds ( - 3 0 ) ;
Option < TrimPlaylistResult > maybeResult = await worker . TrimPlaylist ( now , cancellationToken ) ;
foreach ( TrimPlaylistResult result in maybeResult )
_l ogger . LogDebug ( "Playlist exists" ) ;
var segmentCount = 0 ;
var lastSegmentCount = - 1 ;
while ( DateTimeOffset . Now < finish & & segmentCount < initialSegmentCount )
{
segmentCount = result . SegmentCount ;
if ( segmentCount ! = lastSegmentCount )
{
lastSegmentCount = segmentCount ;
_l ogger . LogDebug (
"Segment count {SegmentCount} of {InitialSegmentCount}" ,
segmentCount ,
initialSegmentCount ) ;
}
await Task . Delay ( TimeSpan . FromMilliseconds ( 2 0 0 ) , cancellationToken ) ;
DateTimeOffset now = DateTimeOffset . Now . AddSeconds ( - 3 0 ) ;
Option < TrimPlaylistResult > maybeResult = await worker . TrimPlaylist ( now , cancellationToken ) ;
foreach ( TrimPlaylistResult result in maybeResult )
{
segmentCount = result . SegmentCount ;
}
}
}
finally
{
sw . Stop ( ) ;
_l ogger . LogDebug ( "WaitForPlaylistSegments took {Duration}" , sw . Elapsed ) ;
}
}
private Task < Validation < BaseError , Unit > > Validate ( StartFFmpegSession request ) = >