我正在尝试用C#制作桌面视频下载应用程序 现在问题是以下代码工作正常:
WebClient webOne = new WebClient();
string temp1 = " http://www.c-sharpcorner.com/UploadFile/shivprasadk/visual-studio-and-net-tips-and-tricks-15/Media/Tip15.wmv";
webOne.DownloadFile(new Uri(temp1), "video.wmv");
但是以下代码没有:
temp1="http://www.youtube.com/watch?v=Y_..."
(在这种情况下,下载200-400千字节的垃圾文件)
两个网址之间的区别是显而易见的,第一个包含文件的确切名称,而其他网址似乎以某种方式加密...
我无法找到任何正确和令人满意的问题解决方案,所以我非常感谢您的帮助,谢谢。
注意:
从这里的一个问题我得到一个链接http://youtubefisher.codeplex.com/所以我访问了那里,获得了源代码并阅读了它。这是伟大的工作,但我似乎没有得到的是,世界上那个人如何知道他下载YouTube视频时必须做什么结构和课程,为什么他必须解决所有麻烦为什么不是'我的方法有效吗?
有人请指导。再次感谢。
答案 0 :(得分:2)
要从youtube下载视频,您必须找到实际的视频位置。不是您用来观看视频的页面。 http://www.youtube.com/watch?v=...
网址是一个html网页(很像这个网页),它将从其源位置加载视频并显示它。通常,您必须解析html并从html中提取视频位置。
在你的情况下,你找到了已经执行此操作的代码 - 幸运的是,因为从youtube下载视频并不简单。查看您在问题中提供的链接,可以在YoutubeService.cs / GetDownloadUrl()
:
http://youtubefisher.codeplex.com/SourceControl/changeset/view/68461#1113202
该方法正在解析由youtube观看网址返回的html页面,并查找实际的视频内容。增加的复杂性是,youtube视频也可以是各种不同的格式。
如果您需要在下载后转换视频类型,我建议使用FFMPEG
编辑:回复你的评论 - 你根本没看过YoutubeFisher的源代码,是吗......我建议分析我提到的文件(YoutubeService.cs
)。虽然我自己快速浏览后,你将不得不解析html页面中的yt.playerConfig
变量。
使用该来源为您提供帮助。
编辑:回应你的第二条评论:“其实我正在尝试开发一个可以从任何视频网站下载视频的应用程序。”你说它就像它的简单 - 它不是。由于每个视频网站都不同,你不能只写一些适用于所有开箱即用的东西。如果我不得不这样做,那么我会怎么做:我会为主要的视频分享网站(Metacafe,Youtube,无论如何)编写自定义解析器,以便那些人可以保证工作。在那之后,如果你愿意,我会写一个“失败者”。基本上,如果你要求一个来自未知网站的视频,它会搜索html寻找已知的视频扩展(flv,wmv,mp4等),然后从中提取网址。
您可以使用正则表达式来提取后一种情况下的网址,或者像indexof,substring和lastindexof这样的组合。
答案 1 :(得分:1)
我找到了这个页面@ CodeProject,它向您展示了如何使用没有第三方库的高效Youtube下载器。请记住,有时需要稍微修改代码,因为Youtube有时会对其网络结构进行更改,这可能会干扰您的应用与Youtube交互的方式。 这是链接:在这里您还可以下载C#项目文件并直接查看文件。