90 lines
No EOL
2.3 KiB
C#
90 lines
No EOL
2.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Paca.Core;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.Core;
|
|
|
|
public class HlsManifestValidatorGateTests
|
|
{
|
|
[Fact]
|
|
public void Gate441_HlsManifestValidator_DetectsMasterPlaylist_AndVariants()
|
|
{
|
|
var manifest = @"#EXTM3U
|
|
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720
|
|
720p.m3u8
|
|
#EXT-X-STREAM-INF:BANDWIDTH=5000000,RESOLUTION=1920x1080
|
|
1080p.m3u8";
|
|
|
|
var result = HlsManifestValidator.Analyze(manifest);
|
|
|
|
Assert.True(result.IsMasterPlaylist);
|
|
Assert.Equal(2, result.Variants.Count);
|
|
Assert.Equal(5000000, result.Variants[0].Bandwidth); // highest first
|
|
Assert.Equal("1080p.m3u8", result.Variants[0].Uri);
|
|
Assert.Equal("1920x1080", result.Variants[0].Resolution);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate442_HlsManifestValidator_ParsesMediaPlaylist_Accurately()
|
|
{
|
|
var manifest = @"#EXTM3U
|
|
#EXT-X-TARGETDURATION:10
|
|
#EXTINF:10.0,
|
|
seg1.ts
|
|
#EXTINF:10.0,
|
|
seg2.ts
|
|
#EXTINF:5.5,
|
|
seg3.ts
|
|
#EXT-X-ENDLIST";
|
|
|
|
var result = HlsManifestValidator.Analyze(manifest);
|
|
|
|
Assert.False(result.IsMasterPlaylist);
|
|
Assert.True(result.IsVod);
|
|
Assert.False(result.IsLive);
|
|
Assert.Equal(3, result.SegmentCount);
|
|
Assert.Equal(25.5, result.TotalDurationSec, 1);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate443_HlsManifestValidator_DetectsDiscontinuities_AndLiveStream()
|
|
{
|
|
var manifest = @"#EXTM3U
|
|
#EXT-X-TARGETDURATION:6
|
|
#EXTINF:6.0,
|
|
live1.ts
|
|
#EXT-X-DISCONTINUITY
|
|
#EXTINF:6.0,
|
|
live2.ts";
|
|
|
|
var result = HlsManifestValidator.Analyze(manifest);
|
|
|
|
Assert.True(result.IsLive);
|
|
Assert.False(result.IsVod);
|
|
Assert.Equal(1, result.DiscontinuityCount);
|
|
Assert.Equal(2, result.SegmentCount);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate444_HlsManifestValidator_StripsAdDiscontinuityBlocks()
|
|
{
|
|
var manifest = @"#EXTM3U
|
|
#EXTINF:10.0,
|
|
main1.ts
|
|
#EXT-X-DISCONTINUITY
|
|
#EXTINF:15.0,
|
|
ad1.ts
|
|
#EXT-X-DISCONTINUITY
|
|
#EXTINF:10.0,
|
|
main2.ts
|
|
#EXT-X-ENDLIST";
|
|
|
|
// Ad duration 15.0s between discontinuities stripped
|
|
var cleaned = HlsManifestValidator.StripAdBlocks(manifest, maxAdDurationSec: 30.0);
|
|
|
|
Assert.Contains("main1.ts", cleaned);
|
|
Assert.Contains("main2.ts", cleaned);
|
|
Assert.DoesNotContain("ad1.ts", cleaned);
|
|
}
|
|
} |