public void DownloadAllVideos(PDownload pDownload) { Broadcasts broadcasts = GetBroadcasts(pDownload.User); broadcasts.broadcasts = broadcasts.broadcasts.Where(b => b.available_for_replay || b.state == "RUNNING").ToList(); if (pDownload.IsReverseOrder) broadcasts.broadcasts.Reverse(); #region Selected Videos List<int> selectedVideos = pDownload.SelectedVideos; if (selectedVideos.Any()) { List<Broadcast> selectedBroadcasts = new List<Broadcast>(); selectedBroadcasts.AddRange(selectedVideos.Select(selectedVideo => broadcasts.broadcasts[selectedVideo])); broadcasts.broadcasts = selectedBroadcasts.ToList(); } #endregion #region Selected Broadcasts List<string> selectedBroadcastsText = pDownload.SelectedBroadcasts; if (selectedBroadcastsText.Any()) { broadcasts.broadcasts = selectedBroadcastsText.Select( selectedBroadcast => broadcasts.broadcasts.First(b => b.id == selectedBroadcast)).ToList(); } #endregion Console.WriteLine(broadcasts.broadcasts.Count + " broadcasts found."); foreach (var broadcast in broadcasts.broadcasts) { DownloadVideos(broadcast, pDownload.DownloadLiveStream); } }
private void DownloadLiveStream(Broadcast broadcast, AccessPublic accessPublic) { List<string> chunklist = new List<string>(); Uri httpsHlsUrl = new Uri(accessPublic.https_hls_url); string baseUrl = httpsHlsUrl.Scheme + "://" + httpsHlsUrl.DnsSafeHost + httpsHlsUrl.Segments[0] + httpsHlsUrl.Segments[1] + httpsHlsUrl.Segments[2] + httpsHlsUrl.Segments[3]; bool liveStream = true; while (liveStream) { UpdateChunklist(broadcast, baseUrl, ref chunklist, ref liveStream); foreach (var chunk in chunklist.ToList()) { string message; chunklist.Remove(chunk); DownloadChunk(broadcast, baseUrl, chunk, out message); Console.WriteLine(message); } } var pDownload = new PDownload { User = broadcast.username, Broadcast = broadcast.id, DownloadLiveStream = false }; DownloadVideos(pDownload); }