示例#1
0
        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++;
                    });
            }
        }
示例#2
0
 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);
 }
示例#3
0
        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);
        }