@ -12,7 +12,7 @@ namespace ErsatzTV.Core.Tests.FFmpeg
public void HlsPlaylistFilter_ShouldRewriteProgramDateTime ( )
public void HlsPlaylistFilter_ShouldRewriteProgramDateTime ( )
{
{
var start = new DateTimeOffset ( 2 0 2 1 , 1 0 , 9 , 8 , 0 , 0 , TimeSpan . FromHours ( - 5 ) ) ;
var start = new DateTimeOffset ( 2 0 2 1 , 1 0 , 9 , 8 , 0 , 0 , TimeSpan . FromHours ( - 5 ) ) ;
string [ ] input = @ "#EXTM3U
string [ ] input = NormalizeLineEndings ( @ "#EXTM3U
# EXT - X - VERSION : 6
# EXT - X - VERSION : 6
# EXT - X - TARGETDURATION : 4
# EXT - X - TARGETDURATION : 4
# EXT - X - MEDIA - SEQUENCE : 1 1 3 7
# EXT - X - MEDIA - SEQUENCE : 1 1 3 7
@ -26,13 +26,13 @@ live001137.ts
live001138 . ts
live001138 . ts
# EXTINF : 4.000000 ,
# EXTINF : 4.000000 ,
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 8 T08 : 3 4 : 5 7.320 - 0 5 0 0
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 8 T08 : 3 4 : 5 7.320 - 0 5 0 0
live001139 . ts ".Split(Environment.NewLine);
live001139 . ts ") .Split(Environment.NewLine);
TrimPlaylistResult result = HlsPlaylistFilter . TrimPlaylist ( start , start . AddSeconds ( - 3 0 ) , input ) ;
TrimPlaylistResult result = HlsPlaylistFilter . TrimPlaylist ( start , start . AddSeconds ( - 3 0 ) , input ) ;
result . PlaylistStart . Should ( ) . Be ( start ) ;
result . PlaylistStart . Should ( ) . Be ( start ) ;
result . Sequence . Should ( ) . Be ( 1 1 3 7 ) ;
result . Sequence . Should ( ) . Be ( 1 1 3 7 ) ;
result . Playlist . Should ( ) . Be (
result . Playlist . Should ( ) . Be ( NormalizeLineEndings (
@ "#EXTM3U
@ "#EXTM3U
# EXT - X - VERSION : 6
# EXT - X - VERSION : 6
# EXT - X - TARGETDURATION : 4
# EXT - X - TARGETDURATION : 4
@ -49,14 +49,14 @@ live001138.ts
# EXTINF : 4.000000 ,
# EXTINF : 4.000000 ,
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 9 T08 : 0 0 : 0 8.000 - 0 5 0 0
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 9 T08 : 0 0 : 0 8.000 - 0 5 0 0
live001139 . ts
live001139 . ts
");
")) ;
}
}
[Test]
[Test]
public void HlsPlaylistFilter_ShouldLimitSegments ( )
public void HlsPlaylistFilter_ShouldLimitSegments ( )
{
{
var start = new DateTimeOffset ( 2 0 2 1 , 1 0 , 9 , 8 , 0 , 0 , TimeSpan . FromHours ( - 5 ) ) ;
var start = new DateTimeOffset ( 2 0 2 1 , 1 0 , 9 , 8 , 0 , 0 , TimeSpan . FromHours ( - 5 ) ) ;
string [ ] input = @ "#EXTM3U
string [ ] input = NormalizeLineEndings ( @ "#EXTM3U
# EXT - X - VERSION : 6
# EXT - X - VERSION : 6
# EXT - X - TARGETDURATION : 4
# EXT - X - TARGETDURATION : 4
# EXT - X - MEDIA - SEQUENCE : 1 1 3 7
# EXT - X - MEDIA - SEQUENCE : 1 1 3 7
@ -70,13 +70,13 @@ live001137.ts
live001138 . ts
live001138 . ts
# EXTINF : 4.000000 ,
# EXTINF : 4.000000 ,
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 8 T08 : 3 4 : 5 7.320 - 0 5 0 0
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 8 T08 : 3 4 : 5 7.320 - 0 5 0 0
live001139 . ts ".Split(Environment.NewLine);
live001139 . ts ") .Split(Environment.NewLine);
TrimPlaylistResult result = HlsPlaylistFilter . TrimPlaylist ( start , start . AddSeconds ( - 3 0 ) , input , 2 ) ;
TrimPlaylistResult result = HlsPlaylistFilter . TrimPlaylist ( start , start . AddSeconds ( - 3 0 ) , input , 2 ) ;
result . PlaylistStart . Should ( ) . Be ( start ) ;
result . PlaylistStart . Should ( ) . Be ( start ) ;
result . Sequence . Should ( ) . Be ( 1 1 3 7 ) ;
result . Sequence . Should ( ) . Be ( 1 1 3 7 ) ;
result . Playlist . Should ( ) . Be (
result . Playlist . Should ( ) . Be ( NormalizeLineEndings (
@ "#EXTM3U
@ "#EXTM3U
# EXT - X - VERSION : 6
# EXT - X - VERSION : 6
# EXT - X - TARGETDURATION : 4
# EXT - X - TARGETDURATION : 4
@ -90,14 +90,14 @@ live001137.ts
# EXTINF : 4.000000 ,
# EXTINF : 4.000000 ,
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 9 T08 : 0 0 : 0 4.000 - 0 5 0 0
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 9 T08 : 0 0 : 0 4.000 - 0 5 0 0
live001138 . ts
live001138 . ts
");
")) ;
}
}
[Test]
[Test]
public void HlsPlaylistFilter_ShouldAddDiscontinuity ( )
public void HlsPlaylistFilter_ShouldAddDiscontinuity ( )
{
{
var start = new DateTimeOffset ( 2 0 2 1 , 1 0 , 9 , 8 , 0 , 0 , TimeSpan . FromHours ( - 5 ) ) ;
var start = new DateTimeOffset ( 2 0 2 1 , 1 0 , 9 , 8 , 0 , 0 , TimeSpan . FromHours ( - 5 ) ) ;
string [ ] input = @ "#EXTM3U
string [ ] input = NormalizeLineEndings ( @ "#EXTM3U
# EXT - X - VERSION : 6
# EXT - X - VERSION : 6
# EXT - X - TARGETDURATION : 4
# EXT - X - TARGETDURATION : 4
# EXT - X - MEDIA - SEQUENCE : 1 1 3 7
# EXT - X - MEDIA - SEQUENCE : 1 1 3 7
@ -111,7 +111,7 @@ live001137.ts
live001138 . ts
live001138 . ts
# EXTINF : 4.000000 ,
# EXTINF : 4.000000 ,
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 8 T08 : 3 4 : 5 7.320 - 0 5 0 0
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 8 T08 : 3 4 : 5 7.320 - 0 5 0 0
live001139 . ts ".Split(Environment.NewLine);
live001139 . ts ") .Split(Environment.NewLine);
TrimPlaylistResult result = HlsPlaylistFilter . TrimPlaylist (
TrimPlaylistResult result = HlsPlaylistFilter . TrimPlaylist (
start ,
start ,
@ -122,7 +122,7 @@ live001139.ts".Split(Environment.NewLine);
result . PlaylistStart . Should ( ) . Be ( start ) ;
result . PlaylistStart . Should ( ) . Be ( start ) ;
result . Sequence . Should ( ) . Be ( 1 1 3 7 ) ;
result . Sequence . Should ( ) . Be ( 1 1 3 7 ) ;
result . Playlist . Should ( ) . Be (
result . Playlist . Should ( ) . Be ( NormalizeLineEndings (
@ "#EXTM3U
@ "#EXTM3U
# EXT - X - VERSION : 6
# EXT - X - VERSION : 6
# EXT - X - TARGETDURATION : 4
# EXT - X - TARGETDURATION : 4
@ -140,14 +140,14 @@ live001138.ts
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 9 T08 : 0 0 : 0 8.000 - 0 5 0 0
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 9 T08 : 0 0 : 0 8.000 - 0 5 0 0
live001139 . ts
live001139 . ts
# EXT - X - DISCONTINUITY
# EXT - X - DISCONTINUITY
");
")) ;
}
}
[Test]
[Test]
public void HlsPlaylistFilter_ShouldFilterOldSegments ( )
public void HlsPlaylistFilter_ShouldFilterOldSegments ( )
{
{
var start = new DateTimeOffset ( 2 0 2 1 , 1 0 , 9 , 8 , 0 , 0 , TimeSpan . FromHours ( - 5 ) ) ;
var start = new DateTimeOffset ( 2 0 2 1 , 1 0 , 9 , 8 , 0 , 0 , TimeSpan . FromHours ( - 5 ) ) ;
string [ ] input = @ "#EXTM3U
string [ ] input = NormalizeLineEndings ( @ "#EXTM3U
# EXT - X - VERSION : 6
# EXT - X - VERSION : 6
# EXT - X - TARGETDURATION : 4
# EXT - X - TARGETDURATION : 4
# EXT - X - MEDIA - SEQUENCE : 1 1 3 7
# EXT - X - MEDIA - SEQUENCE : 1 1 3 7
@ -161,13 +161,13 @@ live001137.ts
live001138 . ts
live001138 . ts
# EXTINF : 4.000000 ,
# EXTINF : 4.000000 ,
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 8 T08 : 3 4 : 5 7.320 - 0 5 0 0
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 8 T08 : 3 4 : 5 7.320 - 0 5 0 0
live001139 . ts ".Split(Environment.NewLine);
live001139 . ts ") .Split(Environment.NewLine);
TrimPlaylistResult result = HlsPlaylistFilter . TrimPlaylist ( start , start . AddSeconds ( 6 ) , input ) ;
TrimPlaylistResult result = HlsPlaylistFilter . TrimPlaylist ( start , start . AddSeconds ( 6 ) , input ) ;
result . PlaylistStart . Should ( ) . Be ( start . AddSeconds ( 8 ) ) ;
result . PlaylistStart . Should ( ) . Be ( start . AddSeconds ( 8 ) ) ;
result . Sequence . Should ( ) . Be ( 1 1 3 9 ) ;
result . Sequence . Should ( ) . Be ( 1 1 3 9 ) ;
result . Playlist . Should ( ) . Be (
result . Playlist . Should ( ) . Be ( NormalizeLineEndings (
@ "#EXTM3U
@ "#EXTM3U
# EXT - X - VERSION : 6
# EXT - X - VERSION : 6
# EXT - X - TARGETDURATION : 4
# EXT - X - TARGETDURATION : 4
@ -178,14 +178,14 @@ live001139.ts".Split(Environment.NewLine);
# EXTINF : 4.000000 ,
# EXTINF : 4.000000 ,
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 9 T08 : 0 0 : 0 8.000 - 0 5 0 0
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 9 T08 : 0 0 : 0 8.000 - 0 5 0 0
live001139 . ts
live001139 . ts
");
")) ;
}
}
[Test]
[Test]
public void HlsPlaylistFilter_ShouldFilterOldDiscontinuity ( )
public void HlsPlaylistFilter_ShouldFilterOldDiscontinuity ( )
{
{
var start = new DateTimeOffset ( 2 0 2 1 , 1 0 , 9 , 8 , 0 , 0 , TimeSpan . FromHours ( - 5 ) ) ;
var start = new DateTimeOffset ( 2 0 2 1 , 1 0 , 9 , 8 , 0 , 0 , TimeSpan . FromHours ( - 5 ) ) ;
string [ ] input = @ "#EXTM3U
string [ ] input = NormalizeLineEndings ( @ "#EXTM3U
# EXT - X - VERSION : 6
# EXT - X - VERSION : 6
# EXT - X - TARGETDURATION : 4
# EXT - X - TARGETDURATION : 4
# EXT - X - MEDIA - SEQUENCE : 1 1 3 7
# EXT - X - MEDIA - SEQUENCE : 1 1 3 7
@ -200,13 +200,13 @@ live001137.ts
live001138 . ts
live001138 . ts
# EXTINF : 4.000000 ,
# EXTINF : 4.000000 ,
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 8 T08 : 3 4 : 5 7.320 - 0 5 0 0
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 8 T08 : 3 4 : 5 7.320 - 0 5 0 0
live001139 . ts ".Split(Environment.NewLine);
live001139 . ts ") .Split(Environment.NewLine);
TrimPlaylistResult result = HlsPlaylistFilter . TrimPlaylist ( start , start . AddSeconds ( 6 ) , input ) ;
TrimPlaylistResult result = HlsPlaylistFilter . TrimPlaylist ( start , start . AddSeconds ( 6 ) , input ) ;
result . PlaylistStart . Should ( ) . Be ( start . AddSeconds ( 8 ) ) ;
result . PlaylistStart . Should ( ) . Be ( start . AddSeconds ( 8 ) ) ;
result . Sequence . Should ( ) . Be ( 1 1 3 9 ) ;
result . Sequence . Should ( ) . Be ( 1 1 3 9 ) ;
result . Playlist . Should ( ) . Be (
result . Playlist . Should ( ) . Be ( NormalizeLineEndings (
@ "#EXTM3U
@ "#EXTM3U
# EXT - X - VERSION : 6
# EXT - X - VERSION : 6
# EXT - X - TARGETDURATION : 4
# EXT - X - TARGETDURATION : 4
@ -217,7 +217,15 @@ live001139.ts".Split(Environment.NewLine);
# EXTINF : 4.000000 ,
# EXTINF : 4.000000 ,
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 9 T08 : 0 0 : 0 8.000 - 0 5 0 0
# EXT - X - PROGRAM - DATE - TIME : 2 0 2 1 - 1 0 - 0 9 T08 : 0 0 : 0 8.000 - 0 5 0 0
live001139 . ts
live001139 . ts
");
"));
}
private static string NormalizeLineEndings ( string str )
{
return str
. Replace ( "\r\n" , "\n" )
. Replace ( "\r" , "\n" )
. Replace ( "\n" , Environment . NewLine ) ;
}
}
}
}
}
}