Exemplo n.º 1
0
        public static async Task <string> DownloadVideo(ChromiumWebBrowser youtubePlayer)
        {
#if USE_YOUTUBE_EXTRACTOR
            string link = "https://www.youtube.com/watch?v=" + Music.VideoId;

            IEnumerable <VideoInfo> videoInfos = DownloadUrlResolver.GetDownloadUrls(link);

            VideoInfo video = videoInfos
                              .First(info => info.VideoType == VideoType.WebM && info.Resolution == 360);

            if (video.RequiresDecryption)
            {
                DownloadUrlResolver.DecryptDownloadUrl(video);
            }

            var fullName = video.Title;
            var saveName = fullName.Replace("- YouTube", "");

            var videoDownloader = new VideoDownloader(video, Path.Combine(FilePaths.SaveLocation(),
                                                                          FilePaths.RemoveIllegalPathCharacters(saveName)));

            videoDownloader.DownloadProgressChanged += (sender, args) => Console.WriteLine(args.ProgressPercentage);

            videoDownloader.Execute();
#endif
#if USE_LIBVIDEO
/*// Other youtube library libvideo
 * var uri = "https://www.youtube.com/watch?v=" + Music.VideoId;
 * var youTube = YouTube.Default;
 * var video = youTube.GetVideo(uri);*///youtubePlayer.Address = "http://33232463.nhd.weebly.com/";

/*var fullName = video.FullName; // same thing as title + fileExtension
 * var saveName = FilePaths.RemoveIllegalPathCharacters(fullName.Replace("- YouTube", ""));
 * saveName = saveName.Replace("_", "");
 * var bytes = await video.GetBytesAsync();
 * //var stream = video.Stream();*/
#endif
#if USE_YOUTUBEEXPLODE
            // Client
            var client    = new YoutubeClient();
            var videoInfo = await client.GetVideoAsync(VideoId);

            // Print metadata
            Console.WriteLine($"Id: {videoInfo.Id} | Title: {videoInfo.Title} | Author: {videoInfo.Author.Title}");
#endif
            try
            {
                //var streamInfo = videoInfo.MixedStreams
                //  .OrderBy(s => s.VideoEncoding == VideoEncoding.Vp8)
                // .ThenBy(s => s.VideoQuality == VideoQuality.High720).Last();
                //youtubePlayer.LoadHtml(
                // $"<html><body scroll=\"no\" style=\"overflow: hidden\"><iframe id = \"youtubePlayer\" src=\"http://youtube.com/embed/{videoInfo.Id}?autoplay=1&controls=0&disablekb=1&enablejsapi=1&rel=0&showinfo=0&showsearch=0\" width=\"480\" height=\"270\" frameborder=\"0\" allowfullscreen=\"\" Style =\"pointer-events:none;\"></iframe>",
                //  "Music Player");
                youtubePlayer.LoadHtml($"<html>\r\n\r\n<body scroll=\"no\" style=\"overflow: hidden\">\r\n    <div id=\"youtubePlayer\"></div>\r\n    <script>\r\n        var tag = document.createElement(\'script\');\r\n        tag.src = \"https://www.youtube.com/iframe_api\";\r\n        var firstScriptTag = document.getElementsByTagName(\'script\')[0];\r\n        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\r\n        var youtubePlayer;\r\n\r\n    var playBackEnded;\r\n\r\n     function onYouTubeIframeAPIReady() {{\r\n            youtubePlayer = new YT.Player(\'youtubePlayer\', {{\r\n                height: \'270\'\r\n                , width: \'480\'\r\n                , videoId: \'{VideoId}\'\r\n                , playerVars: {{\r\n                    controls: \'0\'\r\n                    , disablekb: \'1\'\r\n                    , autoplay: \'1\'\r\n                    , showinfo: \'0\'\r\n                    , modestbranding: \'1\'\r\n                    , rel: \'0\'\r\n                    , showsearch: \'0\'\r\n                }}, events: {{\r\n                    \'onStateChange\': onPlayerStateChange\r\n                }}\r\n            }});\r\n        }}\r\n        function onPlayerStateChange(event){{\r\n     if( event.data == YT.PlayerState.ENDED) playBackEnded = true; else playBackEnded = false;\r\n        }} </script>\r\n</body>\r\n\r\n</html>", "http://youtube.com");
                Console.WriteLine("Player loaded? " + youtubePlayer.IsLoaded);
            }
            catch
            {
                //   var streamInfo = videoInfo.MixedStreams
                //        .OrderBy(s => s.VideoEncoding == VideoEncoding.Vp8)
                //      .ThenBy(s => s.VideoQuality == VideoQuality.Medium480).Last();
                youtubePlayer.LoadHtml($"<html>\r\n\r\n<body scroll=\"no\" style=\"overflow: hidden\">\r\n    <div id=\"youtubePlayer\"></div>\r\n    <script>\r\n        var tag = document.createElement(\'script\');\r\n        tag.src = \"https://www.youtube.com/iframe_api\";\r\n        var firstScriptTag = document.getElementsByTagName(\'script\')[0];\r\n        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\r\n        var youtubePlayer;\r\n\r\n    var playBackEnded;\r\n\r\n     function onYouTubeIframeAPIReady() {{\r\n            youtubePlayer = new YT.Player(\'youtubePlayer\', {{\r\n                height: \'270\'\r\n                , width: \'480\'\r\n                , videoId: \'{VideoId}\'\r\n                , playerVars: {{\r\n                    controls: \'0\'\r\n                    , disablekb: \'1\'\r\n                    , autoplay: \'1\'\r\n                    , showinfo: \'0\'\r\n                    , modestbranding: \'1\'\r\n                    , rel: \'0\'\r\n                    , showsearch: \'0\'\r\n                }}, events: {{\r\n                    \'onStateChange\': onPlayerStateChange\r\n                }}\r\n            }});\r\n        }}\r\n        function onPlayerStateChange(event){{\r\n     if( event.data == YT.PlayerState.ENDED) playBackEnded = true; else playBackEnded = false;\r\n        }} </script>\r\n</body>\r\n\r\n</html>", "http://youtube.com");
                Console.WriteLine("Player loaded? " + youtubePlayer.IsLoaded);
            }

            //Console.WriteLine("Can execute JS: "+ youtubePlayer.CanExecuteJavascriptInMainFrame);
#if OFFLINE_IMPLEMENTED
            streamInfo = videoInfo.MixedStreams
                         .OrderBy(s => s.VideoEncoding == YoutubeExplode.Models.mediaStreams.VideoEncoding.H264)
                         .Last();
            // Compose file name, based on metadata
            string fileExtension = streamInfo.Container.GetFileExtension();
            string saveName      = $"{videoInfo.Title}.{fileExtension}";
            // Remove illegal characters from file name
            saveName = FilePaths.RemoveIllegalPathCharacters(saveName);
            // Download video
            Console.WriteLine($"Downloading to [{saveName}]...");
            string savePath = Path.Combine(FilePaths.SaveLocation(),

                                           saveName);
            await client.DownloadmediaStreamAsync(streamInfo, savePath);


            //File.WriteAllBytes(savePath, bytes);
            SongTitle = savePath;
            Console.WriteLine("Done downloading " + SongTitle);
            return(savePath);
#endif

            return(VideoId);
        }