private async Task <string> RenderManifest(MediaManifest manifest) { var outputStream = new MemoryStream(); await new MediaManifestWriter(manifest, outputStream).Render(); outputStream.Position = 0; return(Encoding.ASCII.GetString(outputStream.ToArray())); }
public async Task WritesManifestHeader(int version, PlaylistType playlistType, double targetDuration, ServerControl?serverControl, double?partDuration, Start?start, Map?map, Encryption?encryption, string expected) { var manifest = new MediaManifest( version, playlistType, targetDuration, serverControl, partDuration, start, map, encryption ); Assert.Equal(expected, await RenderManifest(manifest)); }
public async Task MediaManifest() { var manifest = new MediaManifest(version: 8, playlistType: PlaylistType.VOD, targetDuration: 2.0); for (var i = 0; i < 1000; i++) { manifest.Add(new MediaFile { Path = $"{i}.ts", Duration = 2.0 }); } var stream = new MemoryStream(); var writer = new MediaManifestWriter(manifest, stream); await writer.Render(); }
public async Task WritesDiscontinuitySequence() { var manifest = new MediaManifest( version: 8, playlistType: PlaylistType.EVENT, targetDuration: 10 ); manifest.AddAndIncrementSequence(new Discontinuity()); manifest.AddAndIncrementSequence(new Discontinuity()); AssertEqualWithNewline(@"#EXTM3U #EXT-X-PLAYLIST-TYPE:EVENT #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:8 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-DISCONTINUITY-SEQUENCE:2", await RenderManifest(manifest)); }
public async Task WritesMediaSequence() { var manifest = new MediaManifest( version: 8, playlistType: PlaylistType.EVENT, targetDuration: 10 ); manifest.Add(new MediaFile { Path = "test.mp4", Duration = 10 }); manifest.AddAndIncrementSequence(new MediaFile { Path = "test2.mp4", Duration = 10 }); AssertEqualWithNewline(@"#EXTM3U #EXT-X-PLAYLIST-TYPE:EVENT #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:8 #EXT-X-MEDIA-SEQUENCE:1 #EXTINF:10.0, test2.mp4", await RenderManifest(manifest)); }