Пример #1
0
        private void btnDownload_Click(object sender, EventArgs e)
        {
            btnDownload.Enabled = false;
            YoutubeFormat[] items = this.FormatBucket.ToArray();
            YoutubeFormat   item  = (YoutubeFormat)items.GetValue(tableResult.CurrentCell.RowIndex);

            using (WebClient cl = new WebClient())
            {
                cl.DownloadProgressChanged += DownloadProgressChange;
                cl.DownloadFileCompleted   += new AsyncCompletedEventHandler(OnCompleteDownload);
                cl.DownloadFileAsync(
                    new System.Uri(item.getUrl()),
                    Path.Combine(DownloadPath, item.GetFilename() + "." + item.GetExt())
                    );
            }
        }
Пример #2
0
        public void DrawDatatable(dynamic yt = null)
        {
            this.dataTable.Columns.Clear();
            this.dataTable.Rows.Clear();

            DataColumn[] columns =
            {
                new DataColumn("Ext"),
                new DataColumn("Size (Kb)"),
                new DataColumn("Audio Codec"),
                new DataColumn("Video Codec")
            };

            this.dataTable.Columns.AddRange(columns);

            if (yt != null)
            {
                this.FormatBucket.Clear();
                foreach (var item in yt.formats)
                {
                    var filesize = (item.filesize == null) ? 0 : item.filesize;
                    var vcodec   = (item.vcodec == null) ? 0 : item.vcodec;
                    var acodec   = (item.acodec == null) ? 0 : item.acodec;

                    YoutubeFormat f = new YoutubeFormat();
                    f.SetExt(Convert.ToString(item.ext));
                    f.SetFilesize((int)filesize);
                    f.SetAcodec(Convert.ToString(acodec));
                    f.SetVcodec(Convert.ToString(vcodec));
                    f.SetUrl(Convert.ToString(item.url));
                    f.SetFilename(Convert.ToString(yt.fulltitle));

                    this.FormatBucket.Add(f);
                    Object[] c = { item.ext, ((int)filesize / 1024), item.acodec, item.vcodec };
                    this.dataTable.Rows.Add(c);
                }
            }

            tableResult.DataSource = this.dataTable;
        }
Пример #3
0
        private List <YoutubeFormat> GetFormatsInternal()
        {
            string rawVideoFormats;

            using (var process = CreateProcess("--list-formats"))
            {
                process.Start();
                _logger.Info("Retrieving video formats...");

                rawVideoFormats = process.StandardOutput.ReadToEnd();

                process.WaitForExit();
            }

            _logger.Debug("Formats:");
            _logger.Debug(rawVideoFormats);

            var lines = rawVideoFormats.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);

            var formats = new List <YoutubeFormat>();

            foreach (var line in lines)
            {
                if (!line.StartsWithDigit())
                {
                    continue;
                }

                var match = AudioVideoFormatRegex.Match(line);
                if (!match.Success)
                {
                    continue;
                }

                int code;
                if (!int.TryParse(match.Groups["code"].Value, out code))
                {
                    continue;
                }

                var extension = match.Groups["ext"].Value;

                var format = new YoutubeFormat
                {
                    Code      = code,
                    Extension = extension
                };

                var kind = match.Groups["kind"].Value;
                if ("audio".Equals(kind))
                {
                    format.Kind = YoutubeFormatKind.Audio;
                }
                if ("video".Equals(kind))
                {
                    format.Kind = YoutubeFormatKind.Video;
                }

                var res = match.Groups["res"].Value;
                if (format.Kind == YoutubeFormatKind.Video)
                {
                    var dimensions = res.Split(new[] { 'x' }, 2, StringSplitOptions.RemoveEmptyEntries);
                    if (dimensions.Length == 2)
                    {
                        int width, height;
                        if (int.TryParse(dimensions[0], out width) && int.TryParse(dimensions[1], out height))
                        {
                            format.VideoWidth  = width;
                            format.VideoHeight = height;
                        }
                    }
                }

                int quality;
                if (int.TryParse(match.Groups["quality"].Value, out quality))
                {
                    format.Quality = quality;
                }

                formats.Add(format);
            }

            return(formats);
        }