public async Task DownloadAsync_With2Url_Success(string segmentedExt, string expectedExt) { var success = false; var cs = new CancellationTokenSource(); var n = 10; mockServer = new MockServer.MockServer(); var pl1 = CreateMockPlaylist(n, mockServer, segmentedExt); var pl2 = CreateMockPlaylist(n, mockServer, segmentedExt); mockServer.StartAsync(); string configDir = Path.GetTempPath(); string id = Guid.NewGuid().ToString(); string tempDir = Path.Combine(Path.GetTempPath(), id); Directory.CreateDirectory(tempDir); Console.WriteLine(tempDir); var hc = new MultiSourceHLSDownloader( new MultiSourceHLSDownloadInfo { VideoUri = pl1.Url, AudioUri = pl2.Url }, mediaProcessor: new FakeMediaProcessor()); hc.Finished += (a, b) => { success = true; cs.Cancel(); }; hc.Failed += (a, b) => { success = false; cs.Cancel(); }; hc.TargetDir = tempDir; hc.TargetFileName = "Sample"; hc.Start(); try { await Task.Delay(5 * 60 * 1000, cs.Token); } catch { } Assert.IsTrue(success); Console.WriteLine(hc.Duration); Assert.NotZero(hc.Duration); long size2 = hc.FileSize; Assert.AreEqual(pl1.Size + pl2.Size, size2); Assert.IsTrue(expectedExt.Equals(Path.GetExtension(hc.TargetFileName), StringComparison.InvariantCultureIgnoreCase)); }
public async Task DownloadAsyncWithMockSuccess(string segmentedExt, string expectedExt) { var n = 20; var random = new Random(); mockServer = new MockServer.MockServer(); var size = 0L; var mockIds = new string[n]; var streams = new StringBuilder(); for (var i = 0; i < n; i++) { var mockId = Guid.NewGuid().ToString() + segmentedExt; size += mockServer.AddMockHandler(mockId, start: 1, end: random.Next(1, 4)).Size; mockIds[i] = mockId; streams.Append( $@"#EXTINF:57.590867 {mockServer.BaseUrl}{mockId} "); } var playlist = $@" #EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:64 {streams} #EXT-X-ENDLIST "; var pid = Guid.NewGuid().ToString(); mockServer.AddMockHandler(pid, contents: Encoding.UTF8.GetBytes(playlist)); mockServer.StartAsync(); var url = $"{mockServer.BaseUrl}{pid}"; string configDir = Path.GetTempPath(); string id = Guid.NewGuid().ToString(); string tempDir = Path.Combine(Path.GetTempPath(), id); Directory.CreateDirectory(tempDir); Console.WriteLine(tempDir); var success = false; var cs = new CancellationTokenSource(); var hc = new MultiSourceHLSDownloader(new MultiSourceHLSDownloadInfo { VideoUri = url }, mediaProcessor: new FakeMediaProcessor()); hc.Finished += (a, b) => { Console.Write("Success"); success = true; cs.Cancel(); }; hc.Failed += (a, b) => { Console.Write("Failed"); success = false; cs.Cancel(); }; hc.TargetDir = tempDir; hc.TargetFileName = "Sample"; hc.Start(); try { await Task.Delay(2 * 60 * 1000, cs.Token); } catch { } Assert.IsTrue(success); long size2 = hc.FileSize; Console.WriteLine(size2 + " " + size); Console.WriteLine(hc.Duration); Assert.NotZero(hc.Duration); Assert.AreEqual(size2, size); Assert.IsTrue(expectedExt.Equals(Path.GetExtension(hc.TargetFileName), StringComparison.InvariantCultureIgnoreCase)); }
public async Task DownloadAsync_With2Url_PauseResume_Success(string segmentedExt, string expectedExt) { var success = false; var cs = new CancellationTokenSource(); var n = 20; mockServer = new MockServer.MockServer(); var pl1 = CreateMockPlaylist(n, mockServer, segmentedExt); var pl2 = CreateMockPlaylist(n, mockServer, segmentedExt); mockServer.StartAsync(); string configDir = Path.GetTempPath(); string id = Guid.NewGuid().ToString(); string tempDir = Path.Combine(Path.GetTempPath(), id); Directory.CreateDirectory(tempDir); var hc = new MultiSourceHLSDownloader( new MultiSourceHLSDownloadInfo { VideoUri = pl1.Url, AudioUri = pl2.Url }, mediaProcessor: new FakeMediaProcessor()); hc.Finished += (a, b) => { success = true; cs.Cancel(); }; hc.Failed += (a, b) => { success = false; cs.Cancel(); }; hc.TargetDir = tempDir; hc.TargetFileName = "Sample"; hc.Start(); await Task.Delay(10000); hc.Stop(); Log.Information("Stopped --"); await Task.Delay(2000); var name = hc.TargetFileName; cs = new CancellationTokenSource(); hc = new MultiSourceHLSDownloader(hc.Id, mediaProcessor: new FakeMediaProcessor()); hc.TargetDir = tempDir; hc.TargetFileName = name; hc.Finished += (a, b) => { Log.Debug("Finished2"); success = true; cs.Cancel(); }; hc.Failed += (a, b) => { success = false; cs.Cancel(); }; hc.Resume(); try { await Task.Delay(15 * 60 * 1000, cs.Token); } catch { } Assert.IsTrue(success); long size2 = hc.FileSize; //foreach (var f in Directory.EnumerateFiles(Path.Combine(Config.DataDir, hc.Id))) //{ // size2 += new FileInfo(f).Length; //} Log.Debug(size2 + " " + (pl1.Size + pl2.Size)); Assert.AreEqual(pl1.Size + pl2.Size, size2); Log.Debug(expectedExt + " " + Path.GetExtension(hc.TargetFileName)); Assert.IsTrue(expectedExt.Equals(Path.GetExtension(hc.TargetFileName), StringComparison.InvariantCultureIgnoreCase)); }
public async Task DownloadAsyncWithMockPauseResumeSuccess() { var success = false; var cs = new CancellationTokenSource(); var n = 10; mockServer = new MockServer.MockServer(); var pl = CreateMockPlaylist(n, mockServer); mockServer.StartAsync(); string configDir = Path.GetTempPath(); string id = Guid.NewGuid().ToString(); string tempDir = Path.Combine(Path.GetTempPath(), id); Directory.CreateDirectory(tempDir); Console.WriteLine(tempDir); var hc = new MultiSourceHLSDownloader(new MultiSourceHLSDownloadInfo { VideoUri = pl.Url }, mediaProcessor: new FakeMediaProcessor()); hc.Finished += (a, b) => { success = true; cs.Cancel(); }; hc.Failed += (a, b) => { success = false; cs.Cancel(); }; hc.TargetDir = tempDir; hc.TargetFileName = "Sample"; hc.Start(); await Task.Delay(2000); hc.Stop(); Log.Information("Stopped --"); await Task.Delay(2000); var name = hc.TargetFileName; cs = new CancellationTokenSource(); hc = new MultiSourceHLSDownloader(hc.Id, mediaProcessor: new FakeMediaProcessor()); hc.TargetDir = tempDir; hc.TargetFileName = name; hc.Finished += (a, b) => { success = true; cs.Cancel(); }; hc.Failed += (a, b) => { success = false; cs.Cancel(); }; hc.Resume(); try { await Task.Delay(Int32.MaxValue, cs.Token); } catch { } Assert.IsTrue(success); long size2 = hc.FileSize; Console.WriteLine(size2 + " " + pl.Size); Console.WriteLine(hc.Duration); Assert.NotZero(hc.Duration); Assert.AreEqual(size2, pl.Size); }