private void DownloadReplayVideos(Broadcast broadcast, AccessPublic accessPublic) { int i = 0; Uri replayUrl = new Uri(accessPublic.replay_url); string baseUrl = replayUrl.Scheme + "://" + replayUrl.DnsSafeHost + "/" + accessPublic.channel + "/"; List<string> highPriorityList; List<string> lowPriorityList; GetPlaylist(broadcast, baseUrl, out highPriorityList, out lowPriorityList); var totalCount = highPriorityList.Count + lowPriorityList.Count; Console.WriteLine(highPriorityList.Count + " high "+ lowPriorityList.Count + " low priority files exists."); Parallel.ForEach(highPriorityList, new ParallelOptions { MaxDegreeOfParallelism = _settings.ApplicationSettings.ParallelSaveLimit }, chunk => { string message; DownloadChunk(broadcast, baseUrl, chunk, out message); Console.WriteLine("[" + (i + 1) + "/" + totalCount + "] " + message); i++; }); if (_settings.UserSettings.DownloadReplayChunkIfLiveStreamChunkExists) { Parallel.ForEach(lowPriorityList, new ParallelOptions {MaxDegreeOfParallelism = _settings.ApplicationSettings.ParallelSaveLimit}, chunk => { string message; DownloadChunk(broadcast, baseUrl, chunk, out message); Console.WriteLine("[" + (i + 1) + "/" + totalCount + "] " + message); i++; }); } }
private void UpdateClient(Uri referer, AccessPublic accessPublic) { _client.Headers.Set(HttpRequestHeader.Cookie, accessPublic.cookies != null && accessPublic.cookies.Any() ? string.Join("; ", accessPublic.cookies.Select(c => c.Name + "=" + c.Value)) : ""); _client.Headers.Set(HttpRequestHeader.Host, accessPublic.IsLiveStream ? new Uri(accessPublic.https_hls_url).DnsSafeHost : new Uri(accessPublic.replay_url).DnsSafeHost); _client.Headers.Set(HttpRequestHeader.Referer, referer.AbsoluteUri); }
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); }