@ -28,6 +28,7 @@ public class HlsSessionWorker : IHlsSessionWorker
@@ -28,6 +28,7 @@ public class HlsSessionWorker : IHlsSessionWorker
private string _ channelNumber ;
private bool _f irstProcess ;
private DateTimeOffset _l astAccess ;
private DateTimeOffset _l astDelete = DateTimeOffset . MinValue ;
private Option < int > _ targetFramerate ;
private Timer _ timer ;
private DateTimeOffset _ transcodedUntil ;
@ -65,7 +66,19 @@ public class HlsSessionWorker : IHlsSessionWorker
@@ -65,7 +66,19 @@ public class HlsSessionWorker : IHlsSessionWorker
try
{
Option < string [ ] > maybeLines = await ReadPlaylistLines ( cancellationToken ) ;
return maybeLines . Map ( input = > _ hlsPlaylistFilter . TrimPlaylist ( PlaylistStart , filterBefore , input ) ) ;
foreach ( string [ ] input in maybeLines )
{
TrimPlaylistResult trimResult = _ hlsPlaylistFilter . TrimPlaylist ( PlaylistStart , filterBefore , input ) ;
if ( DateTimeOffset . Now > _l astDelete . AddSeconds ( 3 0 ) )
{
DeleteOldSegments ( trimResult ) ;
_l astDelete = DateTimeOffset . Now ;
}
return trimResult ;
}
return None ;
}
finally
{
@ -334,33 +347,7 @@ public class HlsSessionWorker : IHlsSessionWorker
@@ -334,33 +347,7 @@ public class HlsSessionWorker : IHlsSessionWorker
lines ) ;
await WritePlaylist ( trimResult . Playlist , cancellationToken ) ;
// delete old segments
var allSegments = Directory . GetFiles (
Path . Combine ( FileSystemLayout . TranscodeFolder , _ channelNumber ) ,
"live*.ts" )
. Map (
file = >
{
string fileName = Path . GetFileName ( file ) ;
var sequenceNumber = int . Parse ( fileName . Replace ( "live" , string . Empty ) . Split ( '.' ) [ 0 ] ) ;
return new Segment ( file , sequenceNumber ) ;
} )
. ToList ( ) ;
var toDelete = allSegments . Filter ( s = > s . SequenceNumber < trimResult . Sequence ) . ToList ( ) ;
// if (toDelete.Count > 0)
// {
// _logger.LogDebug(
// "Deleting HLS segments {Min} to {Max} (less than {StartSequence})",
// toDelete.Map(s => s.SequenceNumber).Min(),
// toDelete.Map(s => s.SequenceNumber).Max(),
// trimResult.Sequence);
// }
foreach ( Segment segment in toDelete )
{
File . Delete ( segment . File ) ;
}
DeleteOldSegments ( trimResult ) ;
PlaylistStart = trimResult . PlaylistStart ;
}
@ -371,6 +358,37 @@ public class HlsSessionWorker : IHlsSessionWorker
@@ -371,6 +358,37 @@ public class HlsSessionWorker : IHlsSessionWorker
}
}
private void DeleteOldSegments ( TrimPlaylistResult trimResult )
{
// delete old segments
var allSegments = Directory . GetFiles (
Path . Combine ( FileSystemLayout . TranscodeFolder , _ channelNumber ) ,
"live*.ts" )
. Map (
file = >
{
string fileName = Path . GetFileName ( file ) ;
var sequenceNumber = int . Parse ( fileName . Replace ( "live" , string . Empty ) . Split ( '.' ) [ 0 ] ) ;
return new Segment ( file , sequenceNumber ) ;
} )
. ToList ( ) ;
var toDelete = allSegments . Filter ( s = > s . SequenceNumber < trimResult . Sequence ) . ToList ( ) ;
if ( toDelete . Count > 0 )
{
_l ogger . LogDebug (
"Deleting HLS segments {Min} to {Max} (less than {StartSequence})" ,
toDelete . Map ( s = > s . SequenceNumber ) . Min ( ) ,
toDelete . Map ( s = > s . SequenceNumber ) . Max ( ) ,
trimResult . Sequence ) ;
}
foreach ( Segment segment in toDelete )
{
File . Delete ( segment . File ) ;
}
}
private async Task < long > GetPtsOffset (
IMediator mediator ,
string channelNumber ,